From 981a83eb66f19c11b99aa93733ce229d5bcad43b Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Fri, 2 Oct 2026 09:32:08 +0100 Subject: [PATCH 1/7] chore: merge v0.13.2 --- .github/workflows/.test.yml | 38 +- .github/workflows/buildkit.yml | 8 - .github/workflows/dockerd.yml | 14 +- .github/workflows/test-os.yml | 73 +- Dockerfile | 17 +- api/services/control/control.pb.go | 466 +++++-------- client/solve.go | 77 +- cmd/buildkitd/main.go | 39 +- exporter/earthlyoutputs/export.go | 24 +- .../registry/eodriver/multimultiprovider.go | 10 +- exporter/earthlyoutputs/registry/registry.go | 5 +- frontend/frontend.go | 8 - frontend/gateway/client/client.go | 4 - frontend/gateway/forwarder/forward.go | 5 +- frontend/gateway/gateway.go | 13 +- frontend/gateway/grpcclient/client.go | 8 - frontend/gateway/pb/gateway.pb.go | 655 ++++++------------ go.mod | 43 +- go.sum | 254 +------ hack/dockerfiles/lint.Dockerfile | 9 - session/configurabletimeout.go | 10 +- session/filesync/filesync.go | 120 ++-- session/grpc.go | 87 +-- session/manager.go | 5 - session/socketforward/copy.go | 6 +- session/socketforward/socket.go | 4 +- solver/jobs.go | 4 - solver/llbsolver/bridge.go | 46 +- solver/llbsolver/mounts/mount.go | 8 +- solver/pb/caps.go | 11 +- solver/pb/ops.pb.go | 579 ++++++---------- solver/pb/ops.proto | 7 +- solver/scheduler.go | 5 +- util/semutil/weighted.go | 4 +- vendor/github.com/docker/libtrust/README.md | 4 + vendor/github.com/docker/libtrust/util.go | 4 +- vendor/github.com/garyburd/redigo/LICENSE | 175 +++++ .../garyburd/redigo/internal/commandinfo.go | 9 + .../github.com/garyburd/redigo/redis/conn.go | 362 ++++++++-- .../github.com/garyburd/redigo/redis/doc.go | 166 ++--- .../github.com/garyburd/redigo/redis/go16.go | 28 + .../github.com/garyburd/redigo/redis/go17.go | 30 + .../github.com/garyburd/redigo/redis/go18.go | 10 + .../github.com/garyburd/redigo/redis/log.go | 17 + .../github.com/garyburd/redigo/redis/pool.go | 538 +++++++++----- .../garyburd/redigo/redis/pool17.go | 36 + .../garyburd/redigo/redis/pubsub.go | 42 +- .../github.com/garyburd/redigo/redis/redis.go | 83 ++- .../github.com/garyburd/redigo/redis/reply.go | 305 ++++++-- .../github.com/garyburd/redigo/redis/scan.go | 126 +++- .../garyburd/redigo/redis/script.go | 5 + .../github.com/gorilla/handlers/.editorconfig | 20 + vendor/github.com/gorilla/handlers/.gitignore | 2 + .../github.com/gorilla/handlers/.travis.yml | 8 - vendor/github.com/gorilla/handlers/LICENSE | 39 +- vendor/github.com/gorilla/handlers/Makefile | 34 + vendor/github.com/gorilla/handlers/README.md | 26 +- .../github.com/gorilla/handlers/canonical.go | 14 +- .../github.com/gorilla/handlers/compress.go | 157 +++-- vendor/github.com/gorilla/handlers/cors.go | 352 ++++++++++ .../github.com/gorilla/handlers/handlers.go | 300 +------- vendor/github.com/gorilla/handlers/logging.go | 246 +++++++ .../gorilla/handlers/proxy_headers.go | 39 +- .../github.com/gorilla/handlers/recovery.go | 98 +++ vendor/github.com/moby/sys/mount/flags_bsd.go | 3 +- .../github.com/moby/sys/mount/flags_unix.go | 11 +- .../github.com/moby/sys/mount/mount_errors.go | 3 +- .../github.com/moby/sys/mount/mount_unix.go | 8 +- .../moby/sys/mount/mounter_freebsd.go | 1 - .../moby/sys/mount/mounter_openbsd.go | 1 - .../moby/sys/mount/mounter_unsupported.go | 3 +- .../moby/sys/mountinfo/mounted_linux.go | 2 +- .../github.com/tonistiigi/fsutil/.gitignore | 6 +- .../tonistiigi/fsutil/.golangci.yml | 14 - .../github.com/tonistiigi/fsutil/Dockerfile | 18 +- .../github.com/tonistiigi/fsutil/codecov.yml | 12 - .../github.com/tonistiigi/fsutil/copy/copy.go | 69 +- .../tonistiigi/fsutil/copy/copy_darwin.go | 2 +- .../tonistiigi/fsutil/copy/copy_linux.go | 11 +- .../tonistiigi/fsutil/copy/copy_unix.go | 11 +- .../tonistiigi/fsutil/diff_containerd.go | 5 +- .../tonistiigi/fsutil/diskwriter.go | 20 +- .../tonistiigi/fsutil/docker-bake.hcl | 12 +- vendor/github.com/tonistiigi/fsutil/filter.go | 22 +- .../tonistiigi/fsutil/followlinks.go | 8 +- .../github.com/tonistiigi/fsutil/hardlinks.go | 68 -- vendor/github.com/tonistiigi/fsutil/readme.md | 5 - .../github.com/tonistiigi/fsutil/receive.go | 48 +- vendor/github.com/tonistiigi/fsutil/send.go | 23 +- vendor/github.com/tonistiigi/fsutil/stat.go | 2 +- .../github.com/tonistiigi/fsutil/validator.go | 22 +- vendor/golang.org/x/net/context/go17.go | 1 - vendor/golang.org/x/net/context/go19.go | 1 - vendor/golang.org/x/net/context/pre_go17.go | 1 - vendor/golang.org/x/net/context/pre_go19.go | 1 - vendor/modules.txt | 52 +- worker/containerd/containerd.go | 6 +- worker/tests/common.go | 7 +- 98 files changed, 3316 insertions(+), 3104 deletions(-) create mode 100644 vendor/github.com/garyburd/redigo/LICENSE create mode 100644 vendor/github.com/garyburd/redigo/redis/go16.go create mode 100644 vendor/github.com/garyburd/redigo/redis/go17.go create mode 100644 vendor/github.com/garyburd/redigo/redis/go18.go create mode 100644 vendor/github.com/garyburd/redigo/redis/pool17.go create mode 100644 vendor/github.com/gorilla/handlers/.editorconfig create mode 100644 vendor/github.com/gorilla/handlers/.gitignore delete mode 100644 vendor/github.com/gorilla/handlers/.travis.yml create mode 100644 vendor/github.com/gorilla/handlers/Makefile create mode 100644 vendor/github.com/gorilla/handlers/cors.go create mode 100644 vendor/github.com/gorilla/handlers/logging.go create mode 100644 vendor/github.com/gorilla/handlers/recovery.go delete mode 100644 vendor/github.com/tonistiigi/fsutil/codecov.yml diff --git a/.github/workflows/.test.yml b/.github/workflows/.test.yml index e5514e3c4..d0dc85ebc 100644 --- a/.github/workflows/.test.yml +++ b/.github/workflows/.test.yml @@ -63,11 +63,7 @@ jobs: - name: Set outputs id: set -<<<<<<< HEAD - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 -======= - uses: actions/github-script@v7 ->>>>>>> v0.13.2 + uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 => v7 with: script: | const yaml = require('js-yaml'); @@ -136,8 +132,6 @@ jobs: echo "${l?}" >> $GITHUB_ENV done echo "TEST_REPORT_NAME=${{ github.job }}-$(echo "${{ matrix.pkg }}-${{ matrix.skip-integration-tests }}-${{ matrix.kind }}-${{ matrix.worker }}-${{ matrix.tags }}" | tr -dc '[:alnum:]-\n\r' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV -<<<<<<< HEAD -======= testFlags="${{ env.TESTFLAGS }}" if [ -n "${{ matrix.tags }}" ]; then testFlags="${testFlags} --tags=${{ matrix.tags }}" @@ -146,7 +140,6 @@ jobs: testFlags="${testFlags} --run=//worker=${{ matrix.worker }}$" fi echo "TESTFLAGS=${testFlags}" >> $GITHUB_ENV ->>>>>>> v0.13.2 - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 @@ -177,17 +170,6 @@ jobs: - name: Test run: | -<<<<<<< HEAD - export TEST_REPORT_SUFFIX=-${{ github.job }}-$(echo "${{ matrix.pkg }}-${{ matrix.skip-integration-tests }}-${{ matrix.kind }}-${{ matrix.worker }}-${{ matrix.tags }}" | tr -dc '[:alnum:]-\n\r' | tr '[:upper:]' '[:lower:]') - if [ -n "${{ matrix.tags }}" ]; then - TESTFLAGS="${TESTFLAGS} --tags=${{ matrix.tags }}" - fi - if [ -n "${{ matrix.worker }}" ]; then - export TESTFLAGS="${TESTFLAGS} --run=//worker=${{ matrix.worker }}$" - fi - echo TESTFLAGS=$TESTFLAGS -======= ->>>>>>> v0.13.2 ./hack/test ${{ matrix.kind }} env: TEST_REPORT_SUFFIX: -${{ env.TEST_REPORT_NAME }} @@ -199,11 +181,7 @@ jobs: - name: Send to Codecov if: always() -<<<<<<< HEAD - uses: codecov/codecov-action@ab904c41d6ece82784817410c45d8b8c02684457 # v3.1.6 -======= - uses: codecov/codecov-action@v4 ->>>>>>> v0.13.2 + uses: codecov/codecov-action@ab904c41d6ece82784817410c45d8b8c02684457 # v3.1.6 => v4 with: directory: ./bin/testreports flags: ${{ matrix.codecov_flags }} @@ -211,29 +189,17 @@ jobs: - name: Generate annotations if: always() -<<<<<<< HEAD - uses: crazy-max/.github/.github/actions/gotest-annotations@f91220cba053bd54299ba645a599ee8ed436f222 # v1.11.0 -======= uses: crazy-max/.github/.github/actions/gotest-annotations@fa6141aedf23596fb8bdcceab9cce8dadaa31bd9 ->>>>>>> v0.13.2 with: directory: ./bin/testreports - name: Upload test reports if: always() -<<<<<<< HEAD uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: test-reports-${{ env.TEST_REPORT_NAME }} - path: ./bin/testreports - overwrite: true -======= - uses: actions/upload-artifact@v4 with: name: test-reports-${{ env.TEST_REPORT_NAME }} path: ./bin/testreports retention-days: 1 ->>>>>>> v0.13.2 - name: Dump context if: failure() diff --git a/.github/workflows/buildkit.yml b/.github/workflows/buildkit.yml index b13fdea88..091bbc93f 100644 --- a/.github/workflows/buildkit.yml +++ b/.github/workflows/buildkit.yml @@ -109,11 +109,7 @@ jobs: # CACHE_TO: type=gha,scope=binaries-${{ env.PLATFORM_PAIR }} - name: Upload artifacts -<<<<<<< HEAD uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 -======= - uses: actions/upload-artifact@v4 ->>>>>>> v0.13.2 with: name: buildkit-${{ env.PLATFORM_PAIR }} path: ${{ env.DESTDIR }}/* @@ -203,11 +199,7 @@ jobs: steps: - name: Download artifacts -<<<<<<< HEAD uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 -======= - uses: actions/download-artifact@v4 ->>>>>>> v0.13.2 with: path: ${{ env.DESTDIR }} pattern: buildkit-* diff --git a/.github/workflows/dockerd.yml b/.github/workflows/dockerd.yml index be4df3cec..567220a96 100644 --- a/.github/workflows/dockerd.yml +++ b/.github/workflows/dockerd.yml @@ -20,11 +20,7 @@ jobs: steps: - name: Prepare -<<<<<<< HEAD - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 -======= - uses: actions/github-script@v7 ->>>>>>> v0.13.2 + uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 => v7 with: script: | const version = `${{ inputs.version }}` || '25.0.2'; @@ -67,11 +63,7 @@ jobs: wget -qO- "https://download.docker.com/linux/static/stable/x86_64/docker-${{ env.DOCKER_VERSION }}.tgz" | tar xvz --strip 1 - name: Upload dockerd -<<<<<<< HEAD uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 -======= - uses: actions/upload-artifact@v4 ->>>>>>> v0.13.2 with: name: dockerd path: /tmp/moby/dockerd @@ -118,11 +110,7 @@ jobs: buildkitd-flags: --debug - name: Download dockerd -<<<<<<< HEAD uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 -======= - uses: actions/download-artifact@v4 ->>>>>>> v0.13.2 with: name: dockerd path: ./build/ diff --git a/.github/workflows/test-os.yml b/.github/workflows/test-os.yml index 71b1ee413..76fe67169 100644 --- a/.github/workflows/test-os.yml +++ b/.github/workflows/test-os.yml @@ -33,69 +33,10 @@ jobs: - freebsd/amd64 steps: - -<<<<<<< HEAD - name: Checkout - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - - - name: Set up Go - uses: actions/setup-go@7b8cf10d4e4a01d4992d18a89f4d7dc5a3e6d6f4 # v4.3.0 - with: - go-version: "${{ env.GO_VERSION }}" - - - name: Install gotestsum - run: | - go install gotest.tools/gotestsum@${{ env.GOTESTSUM_VERSION }} - - - name: Test - env: - TMPDIR: ${{ runner.temp }} - SKIP_INTEGRATION_TESTS: 1 - run: | - mkdir -p ./bin/testreports - gotestsum \ - --jsonfile="./bin/testreports/go-test-report.json" \ - --junitfile="./bin/testreports/junit-report.xml" \ - --packages="./..." \ - -- \ - "-mod=vendor" \ - "-coverprofile" "./bin/testreports/coverage.txt" \ - "-covermode" "atomic" ${TESTFLAGS} - shell: bash - - - name: Send to Codecov - if: always() - uses: codecov/codecov-action@ab904c41d6ece82784817410c45d8b8c02684457 # v3.1.6 - with: - directory: ./bin/testreports - env_vars: RUNNER_OS - flags: unit - - - name: Generate annotations - if: always() - uses: crazy-max/.github/.github/actions/gotest-annotations@f91220cba053bd54299ba645a599ee8ed436f222 # v1.11.0 - with: - directory: ./bin/testreports - - - name: Upload test reports - if: always() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: test-reports - path: ./bin/testreports - - - name: Dump context - if: failure() - uses: crazy-max/ghaction-dump-context@4d9eeaf15dd59aa4346919ea84a84ccf514b4db8 # v3.1.0 - - build-freebsd-amd64: - runs-on: ubuntu-22.04 - steps: -======= name: Prepare run: | platform=${{ matrix.platform }} echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV ->>>>>>> v0.13.2 - name: Checkout uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 @@ -118,11 +59,7 @@ jobs: tree -nh ${{ env.DESTDIR }} - name: Upload artifacts -<<<<<<< HEAD uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 -======= - uses: actions/upload-artifact@v4 ->>>>>>> v0.13.2 with: name: buildkit-${{ env.PLATFORM_PAIR }} path: ${{ env.DESTDIR }}/* @@ -243,21 +180,13 @@ jobs: uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - name: Download artifacts -<<<<<<< HEAD uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 -======= - uses: actions/download-artifact@v4 ->>>>>>> v0.13.2 with: name: buildkit-freebsd-amd64 path: ${{ env.DESTDIR }} - name: Cache Vagrant boxes -<<<<<<< HEAD - uses: actions/cache@6f8efc29b200d32929f49075959781ed54ec270c # v3.5.0 -======= - uses: actions/cache@v4 ->>>>>>> v0.13.2 + uses: actions/cache@6f8efc29b200d32929f49075959781ed54ec270c # v3.5.0 => v4 with: path: ~/.vagrant.d/boxes key: ${{ runner.os }}-vagrant-${{ hashFiles('hack/Vagrantfile.freebsd13') }} diff --git a/Dockerfile b/Dockerfile index b91c79bcc..1db3a66e7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,7 @@ # syntax=docker/dockerfile-upstream:master ARG RUNC_VERSION=v1.1.12 -<<<<<<< HEAD -ARG CONTAINERD_VERSION=v1.7.7 -======= ARG CONTAINERD_VERSION=v1.7.11 ->>>>>>> v0.13.2 # containerd v1.6 for integration tests ARG CONTAINERD_ALT_VERSION_16=v1.6.24 ARG REGISTRY_VERSION=v2.8.3 @@ -14,11 +10,7 @@ ARG CNI_VERSION=v1.3.0 ARG STARGZ_SNAPSHOTTER_VERSION=v0.15.1 ARG NERDCTL_VERSION=v1.6.2 ARG DNSNAME_VERSION=v1.3.1 -<<<<<<< HEAD ARG NYDUS_VERSION=v2.2.4 -======= -ARG NYDUS_VERSION=v2.1.6 ->>>>>>> origin/main ARG SILO_VERSION=RELEASE.2026-09-16T00-00-00Z ARG AZURITE_VERSION=3.18.0 ARG GOTESTSUM_VERSION=v1.9.0 @@ -26,11 +18,7 @@ ARG DELVE_VERSION=v1.21.0 ARG GO_VERSION=1.21 ARG ALPINE_VERSION=3.19 -<<<<<<< HEAD -ARG XX_VERSION=1.3.0 -======= ARG XX_VERSION=1.4.0 ->>>>>>> v0.13.2 ARG BUILDKIT_DEBUG # silo for s3 integration tests @@ -231,11 +219,8 @@ FROM scratch AS release COPY --link --from=releaser /out/ / FROM alpinebase AS buildkit-export -<<<<<<< HEAD -RUN apk add --no-cache fuse3 git openssh pigz xz iptables iptables-legacy ip6tables \ -======= RUN apk add --no-cache fuse3 git openssh pigz xz iptables ip6tables \ ->>>>>>> v0.13.2 + iptables-legacy \ && ln -s fusermount3 /usr/bin/fusermount COPY --link examples/buildctl-daemonless/buildctl-daemonless.sh /usr/bin/ VOLUME /var/lib/buildkit diff --git a/api/services/control/control.pb.go b/api/services/control/control.pb.go index 850baf9a3..339a68623 100644 --- a/api/services/control/control.pb.go +++ b/api/services/control/control.pb.go @@ -2362,312 +2362,166 @@ func init() { func init() { proto.RegisterFile("control.proto", fileDescriptor_0c5120591600887d) } var fileDescriptor_0c5120591600887d = []byte{ -<<<<<<< HEAD - // 2489 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x39, 0xcd, 0x6e, 0x1b, 0xc9, - 0xd1, 0x3b, 0xa4, 0xc4, 0x9f, 0x22, 0x25, 0x4b, 0xed, 0xb5, 0xbf, 0xf9, 0x26, 0x5e, 0x49, 0x9e, - 0xb5, 0x13, 0xc1, 0xb1, 0x87, 0x5a, 0x66, 0xbd, 0xf6, 0xca, 0x89, 0x63, 0x49, 0x64, 0xd6, 0x72, - 0xec, 0x58, 0xdb, 0x92, 0xd7, 0xc0, 0x02, 0xde, 0x60, 0x44, 0xb6, 0xa8, 0x81, 0x86, 0x33, 0x93, - 0xee, 0xa6, 0x6c, 0xee, 0x03, 0x04, 0x48, 0x0e, 0x41, 0x80, 0x20, 0xc8, 0x25, 0xb7, 0x20, 0xc8, - 0x29, 0xe7, 0x3c, 0x41, 0x00, 0x1f, 0x73, 0xde, 0x83, 0x13, 0xf8, 0x01, 0x82, 0x1c, 0x93, 0x9c, - 0x82, 0xfe, 0x19, 0x72, 0x86, 0x1c, 0x4a, 0x94, 0xed, 0x13, 0xbb, 0xaa, 0xab, 0x6a, 0xaa, 0xab, - 0xaa, 0xab, 0xab, 0x8a, 0x30, 0xd7, 0x0a, 0x03, 0x4e, 0x43, 0xdf, 0x89, 0x68, 0xc8, 0x43, 0xb4, - 0xd0, 0x0d, 0xf7, 0xfb, 0xce, 0x7e, 0xcf, 0xf3, 0xdb, 0x47, 0x1e, 0x77, 0x8e, 0x3f, 0xb2, 0xea, - 0x1d, 0x8f, 0x1f, 0xf6, 0xf6, 0x9d, 0x56, 0xd8, 0xad, 0x75, 0xc2, 0x4e, 0x58, 0xeb, 0x84, 0x61, - 0xc7, 0x27, 0x6e, 0xe4, 0x31, 0xbd, 0xac, 0xd1, 0xa8, 0x55, 0x63, 0xdc, 0xe5, 0x3d, 0xa6, 0xa4, - 0x58, 0x37, 0x46, 0x79, 0x24, 0x7a, 0xbf, 0x77, 0x20, 0x21, 0x09, 0xc8, 0x95, 0x26, 0xaf, 0x25, - 0xc8, 0xc5, 0xf7, 0x6b, 0xf1, 0xf7, 0x6b, 0x6e, 0xe4, 0xd5, 0x78, 0x3f, 0x22, 0xac, 0xf6, 0x3c, - 0xa4, 0x47, 0x84, 0x6a, 0x86, 0xeb, 0x13, 0x19, 0x58, 0xe8, 0x1f, 0x13, 0x5a, 0x8b, 0xf6, 0x6b, - 0x61, 0x14, 0x6b, 0x73, 0xf3, 0x04, 0xea, 0x1e, 0x6d, 0x91, 0x28, 0xf4, 0xbd, 0x56, 0x5f, 0xf0, - 0xa8, 0x95, 0x66, 0x5b, 0xd6, 0xa7, 0x1b, 0xe8, 0xce, 0xbd, 0x2e, 0x61, 0xdc, 0xed, 0x46, 0x8a, - 0xc0, 0xfe, 0xb9, 0x01, 0xd5, 0x1d, 0xda, 0x0b, 0x08, 0x26, 0x3f, 0xeb, 0x11, 0xc6, 0xd1, 0x45, - 0x28, 0x1c, 0x78, 0x3e, 0x27, 0xd4, 0x34, 0x56, 0xf2, 0xab, 0x65, 0xac, 0x21, 0xb4, 0x00, 0x79, - 0xd7, 0xf7, 0xcd, 0xdc, 0x8a, 0xb1, 0x5a, 0xc2, 0x62, 0x89, 0x56, 0xa1, 0x7a, 0x44, 0x48, 0xd4, - 0xe8, 0x51, 0x97, 0x7b, 0x61, 0x60, 0xe6, 0x57, 0x8c, 0xd5, 0xfc, 0xe6, 0xcc, 0xcb, 0x57, 0xcb, - 0x06, 0x4e, 0xed, 0x20, 0x1b, 0xca, 0x02, 0xde, 0xec, 0x73, 0xc2, 0xcc, 0x99, 0x04, 0xd9, 0x10, - 0x6d, 0x5f, 0x83, 0x85, 0x86, 0xc7, 0x8e, 0x9e, 0x30, 0xb7, 0x73, 0x9a, 0x2e, 0xf6, 0x03, 0x58, - 0x4c, 0xd0, 0xb2, 0x28, 0x0c, 0x18, 0x41, 0x37, 0xa1, 0x40, 0x49, 0x2b, 0xa4, 0x6d, 0x49, 0x5c, - 0xa9, 0x7f, 0xe0, 0x8c, 0x86, 0x81, 0xa3, 0x19, 0x04, 0x11, 0xd6, 0xc4, 0xf6, 0xef, 0xf2, 0x50, - 0x49, 0xe0, 0xd1, 0x3c, 0xe4, 0xb6, 0x1b, 0xa6, 0xb1, 0x62, 0xac, 0x96, 0x71, 0x6e, 0xbb, 0x81, - 0x4c, 0x28, 0x3e, 0xea, 0x71, 0x77, 0xdf, 0x27, 0xfa, 0xec, 0x31, 0x88, 0xde, 0x87, 0xd9, 0xed, - 0xe0, 0x09, 0x23, 0xf2, 0xe0, 0x25, 0xac, 0x00, 0x84, 0x60, 0x66, 0xd7, 0xfb, 0x9a, 0xa8, 0x63, - 0x62, 0xb9, 0x46, 0x16, 0x14, 0x76, 0x5c, 0x4a, 0x02, 0x6e, 0xce, 0x0a, 0xb9, 0x9b, 0x39, 0xd3, - 0xc0, 0x1a, 0x83, 0x36, 0xa1, 0xbc, 0x45, 0x89, 0xcb, 0x49, 0x7b, 0x83, 0x9b, 0x85, 0x15, 0x63, - 0xb5, 0x52, 0xb7, 0x1c, 0xe5, 0x35, 0x27, 0xf6, 0x9a, 0xb3, 0x17, 0x7b, 0x6d, 0xb3, 0xf4, 0xf2, - 0xd5, 0xf2, 0x7b, 0xbf, 0xfe, 0xbb, 0xb0, 0xdd, 0x80, 0x0d, 0xdd, 0x03, 0x78, 0xe8, 0x32, 0xfe, - 0x84, 0x49, 0x21, 0xc5, 0x53, 0x85, 0xcc, 0x48, 0x01, 0x09, 0x1e, 0xb4, 0x04, 0x20, 0x8d, 0xb0, - 0x15, 0xf6, 0x02, 0x6e, 0x96, 0xa4, 0xee, 0x09, 0x0c, 0x5a, 0x81, 0x4a, 0x83, 0xb0, 0x16, 0xf5, - 0x22, 0xe9, 0xea, 0xb2, 0x34, 0x4f, 0x12, 0x25, 0x24, 0x28, 0x0b, 0xee, 0xf5, 0x23, 0x62, 0x82, - 0x24, 0x48, 0x60, 0x84, 0x2f, 0x77, 0x0f, 0x5d, 0x4a, 0xda, 0x66, 0x45, 0x9a, 0x4b, 0x43, 0xc2, - 0xbe, 0xca, 0x12, 0xcc, 0xac, 0x4a, 0x27, 0xc7, 0xa0, 0xfd, 0xcb, 0x22, 0x54, 0x77, 0xc5, 0x55, - 0x88, 0xc3, 0x61, 0x01, 0xf2, 0x98, 0x1c, 0x68, 0xdf, 0x88, 0x25, 0x72, 0x00, 0x1a, 0xe4, 0xc0, - 0x0b, 0x3c, 0xa9, 0x55, 0x4e, 0x1e, 0x7c, 0xde, 0x89, 0xf6, 0x9d, 0x21, 0x16, 0x27, 0x28, 0x90, - 0x05, 0xa5, 0xe6, 0x8b, 0x28, 0xa4, 0x22, 0xa4, 0xf2, 0x52, 0xcc, 0x00, 0x46, 0x4f, 0x61, 0x2e, - 0x5e, 0x6f, 0x70, 0x4e, 0x45, 0xa0, 0x8a, 0x30, 0xfa, 0x68, 0x3c, 0x8c, 0x92, 0x4a, 0x39, 0x29, - 0x9e, 0x66, 0xc0, 0x69, 0x1f, 0xa7, 0xe5, 0x88, 0x13, 0xee, 0x12, 0xc6, 0x84, 0x86, 0xd2, 0xfd, - 0x38, 0x06, 0x85, 0x3a, 0x3f, 0xa2, 0x61, 0xc0, 0x49, 0xd0, 0x96, 0xae, 0x2f, 0xe3, 0x01, 0x2c, - 0xd4, 0x89, 0xd7, 0x4a, 0x9d, 0xe2, 0x54, 0xea, 0xa4, 0x78, 0xb4, 0x3a, 0x29, 0x1c, 0x5a, 0x87, - 0xd9, 0x2d, 0xb7, 0x75, 0x48, 0xa4, 0x97, 0x2b, 0xf5, 0xa5, 0x71, 0x81, 0x72, 0xfb, 0xb1, 0x74, - 0x2b, 0x93, 0x17, 0xf5, 0x3d, 0xac, 0x58, 0xd0, 0x57, 0x50, 0x6d, 0x06, 0xdc, 0xe3, 0x3e, 0xe9, - 0x4a, 0x8f, 0x95, 0x85, 0xc7, 0x36, 0xd7, 0xbf, 0x79, 0xb5, 0xfc, 0xc9, 0xc4, 0xfc, 0xd4, 0xe3, - 0x9e, 0x5f, 0x23, 0x09, 0x2e, 0x27, 0x21, 0x02, 0xa7, 0xe4, 0xa1, 0x2f, 0x61, 0x3e, 0x56, 0x76, - 0x3b, 0x88, 0x7a, 0x9c, 0x99, 0x20, 0x4f, 0x5d, 0x9f, 0xf2, 0xd4, 0x8a, 0x49, 0x1d, 0x7b, 0x44, - 0x92, 0x30, 0xf6, 0x76, 0xc0, 0x09, 0x0d, 0x5c, 0x5f, 0x87, 0xe0, 0x00, 0x46, 0xdb, 0x22, 0xd2, - 0x44, 0x1a, 0xdd, 0x91, 0xc9, 0xd3, 0xac, 0x4a, 0xd3, 0x5c, 0x1d, 0xff, 0x6a, 0x32, 0xd9, 0x3a, - 0x8a, 0x18, 0xa7, 0x58, 0xad, 0x7b, 0x80, 0xc6, 0x43, 0x42, 0x84, 0xee, 0x11, 0xe9, 0xc7, 0xa1, - 0x7b, 0x44, 0xfa, 0x22, 0x7b, 0x1c, 0xbb, 0x7e, 0x4f, 0x65, 0x95, 0x32, 0x56, 0xc0, 0x7a, 0xee, - 0xb6, 0x21, 0x24, 0x8c, 0x7b, 0xf1, 0x4c, 0x12, 0x3e, 0x87, 0xf3, 0x19, 0x16, 0xc9, 0x10, 0x71, - 0x25, 0x29, 0x62, 0xfc, 0xea, 0x0c, 0x45, 0xda, 0x7f, 0xce, 0x43, 0x35, 0x19, 0x17, 0x68, 0x0d, - 0xce, 0xab, 0x73, 0x62, 0x72, 0xd0, 0x20, 0x11, 0x25, 0x2d, 0x91, 0x8c, 0xb4, 0xf0, 0xac, 0x2d, - 0x54, 0x87, 0xf7, 0xb7, 0xbb, 0x1a, 0xcd, 0x12, 0x2c, 0x39, 0x79, 0xed, 0x33, 0xf7, 0x50, 0x08, - 0x17, 0x94, 0x28, 0x69, 0x89, 0x04, 0x53, 0x5e, 0xc6, 0xc5, 0xa7, 0x27, 0x07, 0xaf, 0x93, 0xc9, - 0xab, 0xc2, 0x23, 0x5b, 0x2e, 0xfa, 0x01, 0x14, 0xd5, 0x46, 0x7c, 0xff, 0x3f, 0x3c, 0xf9, 0x13, - 0x4a, 0x58, 0xcc, 0x23, 0xd8, 0xd5, 0x39, 0x98, 0x39, 0x7b, 0x06, 0x76, 0xcd, 0x63, 0xdd, 0x07, - 0x6b, 0xb2, 0xca, 0x67, 0x09, 0x01, 0xfb, 0x4f, 0x06, 0x2c, 0x8e, 0x7d, 0x48, 0x3c, 0x4e, 0x32, - 0x3d, 0x2b, 0x11, 0x72, 0x8d, 0x1a, 0x30, 0xab, 0x12, 0x4c, 0x4e, 0x2a, 0xec, 0x4c, 0xa1, 0xb0, - 0x93, 0xc8, 0x2e, 0x8a, 0xd9, 0xba, 0x0d, 0xf0, 0x66, 0xc1, 0x6a, 0xff, 0xc5, 0x80, 0x39, 0x7d, - 0x99, 0xf5, 0x4b, 0xee, 0xc2, 0x42, 0x7c, 0x85, 0x62, 0x9c, 0x7e, 0xd3, 0x6f, 0x4e, 0xcc, 0x03, - 0x8a, 0xcc, 0x19, 0xe5, 0x53, 0x3a, 0x8e, 0x89, 0xb3, 0xb6, 0xe2, 0xb8, 0x1a, 0x21, 0x3d, 0x93, - 0xe6, 0x5b, 0x30, 0xb7, 0x2b, 0x2b, 0xc6, 0xc9, 0x0f, 0xd4, 0x0a, 0x54, 0x44, 0x51, 0xc9, 0x76, - 0x39, 0x25, 0x6e, 0xd7, 0x6c, 0xc9, 0xbc, 0x93, 0x44, 0xd9, 0xff, 0x32, 0x60, 0x3e, 0x96, 0xa2, - 0xcf, 0xff, 0x31, 0x94, 0x8e, 0x09, 0xe5, 0xe4, 0x05, 0x61, 0xfa, 0xdc, 0xe6, 0xf8, 0xb9, 0xbf, - 0x90, 0x14, 0x78, 0x40, 0x89, 0xd6, 0xa1, 0xa4, 0xea, 0x57, 0x12, 0xbb, 0x72, 0x69, 0x12, 0x97, - 0xfe, 0xde, 0x80, 0x1e, 0xd5, 0x60, 0xc6, 0x0f, 0x3b, 0x4c, 0xdf, 0xaa, 0x6f, 0x4d, 0xe2, 0x7b, - 0x18, 0x76, 0xb0, 0x24, 0x44, 0x77, 0xa0, 0xf4, 0xdc, 0xa5, 0x81, 0x17, 0x74, 0xe2, 0x7b, 0xb2, - 0x3c, 0x89, 0xe9, 0xa9, 0xa2, 0xc3, 0x03, 0x06, 0x51, 0x72, 0x15, 0xd4, 0x1e, 0x7a, 0x00, 0x85, - 0xb6, 0xd7, 0x21, 0x8c, 0x2b, 0xa3, 0x6d, 0xd6, 0xc5, 0x6b, 0xf3, 0xcd, 0xab, 0xe5, 0x6b, 0x89, - 0xe7, 0x24, 0x8c, 0x48, 0x20, 0x0a, 0x7c, 0xd7, 0x0b, 0x08, 0x15, 0xf5, 0xfa, 0x0d, 0xc5, 0xe2, - 0x34, 0xe4, 0x0f, 0xd6, 0x12, 0x84, 0x2c, 0x4f, 0x3d, 0x1a, 0x32, 0xa3, 0xbc, 0x99, 0x2c, 0x25, - 0x41, 0x5c, 0x94, 0xc0, 0xed, 0x12, 0x5d, 0x24, 0xc8, 0xb5, 0xa8, 0x60, 0x5a, 0xe2, 0x26, 0xb4, - 0x65, 0x6d, 0x57, 0xc2, 0x1a, 0x42, 0xeb, 0x50, 0x64, 0xdc, 0xa5, 0x22, 0x2b, 0xcd, 0x4e, 0x59, - 0x7a, 0xc5, 0x0c, 0xe8, 0x2e, 0x94, 0x5b, 0x61, 0x37, 0xf2, 0x89, 0xe0, 0x2e, 0x4c, 0xc9, 0x3d, - 0x64, 0x11, 0xc1, 0x49, 0x28, 0x0d, 0xa9, 0x2c, 0xfa, 0xca, 0x58, 0x01, 0xe8, 0x16, 0xcc, 0x45, - 0x34, 0xec, 0x50, 0xc2, 0xd8, 0x67, 0x34, 0xec, 0x45, 0xfa, 0xa9, 0x5f, 0x14, 0xe9, 0x7d, 0x27, - 0xb9, 0x81, 0xd3, 0x74, 0xf6, 0x3f, 0x73, 0x50, 0x4d, 0x86, 0xc8, 0x58, 0x35, 0xfc, 0x00, 0x0a, - 0x2a, 0xe0, 0xd4, 0x6d, 0x78, 0x33, 0x1b, 0x2b, 0x09, 0x99, 0x36, 0x36, 0xa1, 0xd8, 0xea, 0x51, - 0x59, 0x2a, 0xab, 0x02, 0x3a, 0x06, 0xc5, 0x49, 0x79, 0xc8, 0x5d, 0x5f, 0xda, 0x38, 0x8f, 0x15, - 0x20, 0xaa, 0xe7, 0x41, 0x47, 0x73, 0xb6, 0xea, 0x79, 0xc0, 0x96, 0xf4, 0x5f, 0xf1, 0xad, 0xfc, - 0x57, 0x3a, 0xb3, 0xff, 0xec, 0xbf, 0x1a, 0x50, 0x1e, 0xdc, 0xad, 0x84, 0x75, 0x8d, 0xb7, 0xb6, - 0x6e, 0xca, 0x32, 0xb9, 0x37, 0xb3, 0xcc, 0x45, 0x28, 0x30, 0x95, 0xb8, 0x64, 0x6f, 0x87, 0x35, - 0x24, 0xf2, 0x5c, 0x97, 0x75, 0xa4, 0x87, 0xaa, 0x58, 0x2c, 0xed, 0x7f, 0x1b, 0x30, 0x97, 0xba, - 0xee, 0xef, 0xf4, 0x2c, 0xef, 0xc3, 0xac, 0x4f, 0x8e, 0x89, 0xea, 0x3e, 0xf3, 0x58, 0x01, 0x02, - 0xcb, 0x0e, 0x43, 0xca, 0xa5, 0x72, 0x55, 0xac, 0x00, 0xa1, 0x73, 0x9b, 0x70, 0xd7, 0xf3, 0x65, - 0x5e, 0xaa, 0x62, 0x0d, 0x09, 0x9d, 0x7b, 0xd4, 0xd7, 0x15, 0xb8, 0x58, 0x22, 0x1b, 0x66, 0xbc, - 0xe0, 0x20, 0xd4, 0x61, 0x23, 0x6b, 0x1f, 0x55, 0xc9, 0x6d, 0x07, 0x07, 0x21, 0x96, 0x7b, 0xe8, - 0x32, 0x14, 0xa8, 0x1b, 0x74, 0x48, 0x5c, 0x7e, 0x97, 0x05, 0x15, 0x16, 0x18, 0xac, 0x37, 0x6c, - 0x1b, 0xaa, 0xb2, 0x83, 0x7d, 0x44, 0x98, 0xe8, 0x97, 0x44, 0x58, 0xb7, 0x5d, 0xee, 0xca, 0x63, - 0x57, 0xb1, 0x5c, 0xdb, 0xd7, 0x01, 0x3d, 0xf4, 0x18, 0x7f, 0x2a, 0xfb, 0x7f, 0x76, 0x5a, 0x7b, - 0xbb, 0x0b, 0xe7, 0x53, 0xd4, 0xfa, 0x59, 0xf8, 0xfe, 0x48, 0x83, 0x7b, 0x65, 0x3c, 0xe3, 0xca, - 0x31, 0x83, 0xa3, 0x18, 0x47, 0xfa, 0xdc, 0x39, 0xa8, 0xc8, 0x73, 0xa9, 0x6f, 0xdb, 0x7f, 0x34, - 0xa0, 0xaa, 0x60, 0x2d, 0xfd, 0x73, 0x38, 0x17, 0x4b, 0xfa, 0x82, 0x50, 0xd9, 0xad, 0x18, 0xd2, - 0x30, 0xdf, 0x99, 0xf4, 0x99, 0xcd, 0x34, 0x39, 0x1e, 0xe5, 0x17, 0x8f, 0x5f, 0xd0, 0xeb, 0xea, - 0x66, 0x87, 0x99, 0x64, 0xc5, 0x58, 0x9d, 0xc1, 0x49, 0x94, 0x7c, 0x1e, 0x49, 0x2b, 0x0c, 0xda, - 0x6c, 0xbb, 0xed, 0x13, 0xf3, 0x40, 0x51, 0x24, 0x50, 0xf6, 0xff, 0xc1, 0x85, 0xdd, 0xc3, 0x1e, - 0x6f, 0x87, 0xcf, 0x83, 0xed, 0x03, 0x81, 0x89, 0x0f, 0xf0, 0x15, 0x5c, 0x1c, 0xdd, 0xd0, 0x27, - 0xb1, 0xa1, 0xfa, 0xdc, 0xf3, 0xfd, 0x78, 0x57, 0x1e, 0xa3, 0x84, 0x53, 0xb8, 0x51, 0xd5, 0x72, - 0x63, 0xaa, 0xd9, 0x0b, 0x30, 0x8f, 0x09, 0x23, 0x74, 0xd0, 0x64, 0xd8, 0x8b, 0x70, 0x6e, 0x80, - 0x51, 0x9f, 0x92, 0xda, 0x29, 0x86, 0xfb, 0x1e, 0xe3, 0x21, 0xed, 0xc7, 0xb4, 0xff, 0x35, 0xe0, - 0xe2, 0xe8, 0x8e, 0x56, 0xef, 0x01, 0x14, 0x0f, 0x15, 0x4a, 0xfb, 0x71, 0x2d, 0xa3, 0xa8, 0xc9, - 0x64, 0x75, 0x62, 0x38, 0x16, 0x60, 0xfd, 0xc6, 0x80, 0xa2, 0x46, 0xa2, 0x4b, 0x50, 0x66, 0x8a, - 0x6d, 0x90, 0xb1, 0x87, 0x08, 0xf4, 0x09, 0xcc, 0xca, 0x9c, 0x35, 0x45, 0x2a, 0x50, 0x49, 0x4a, - 0x91, 0xa3, 0x3a, 0xe4, 0x45, 0x77, 0x9a, 0x9f, 0x92, 0x4b, 0x10, 0xdb, 0x04, 0xce, 0xcb, 0xd8, - 0x48, 0xdb, 0x04, 0x2d, 0x01, 0x6c, 0xb4, 0xb8, 0x77, 0x4c, 0x1e, 0x07, 0x7e, 0x5f, 0x7b, 0x25, - 0x81, 0x89, 0xab, 0xa7, 0xdc, 0xb0, 0x7a, 0xba, 0x04, 0xe5, 0xa6, 0x4b, 0xfd, 0x7e, 0xf3, 0x85, - 0xc7, 0xf5, 0x94, 0x65, 0x88, 0xb0, 0x7f, 0x65, 0xc0, 0x62, 0xf2, 0x3b, 0xcd, 0x63, 0xf1, 0x4e, - 0xdc, 0x81, 0x19, 0x1e, 0x97, 0xb8, 0xf3, 0x59, 0xc1, 0x3b, 0xc6, 0x22, 0xaa, 0x60, 0x2c, 0x99, - 0x12, 0x57, 0x4c, 0x99, 0xe9, 0xca, 0xc9, 0xec, 0x23, 0x57, 0xec, 0x3f, 0x25, 0x40, 0xe3, 0xdb, - 0x19, 0x55, 0x61, 0xb2, 0xef, 0xcf, 0x8d, 0xf4, 0xfd, 0xcf, 0x46, 0xfb, 0x7e, 0x55, 0x93, 0xdd, - 0x9a, 0x46, 0x93, 0x29, 0xba, 0xff, 0xdb, 0x50, 0x8e, 0x0b, 0xdf, 0xb8, 0x72, 0xb3, 0xc6, 0x45, - 0x0f, 0x6a, 0xe3, 0x21, 0x31, 0x5a, 0x8d, 0x4b, 0x0d, 0x55, 0xe4, 0xa0, 0x38, 0x16, 0x68, 0xd4, - 0x72, 0x74, 0x41, 0xa9, 0xcb, 0x8f, 0xbb, 0x67, 0x1b, 0x69, 0xcd, 0x8c, 0x8e, 0xb3, 0x36, 0xa1, - 0xb2, 0x15, 0xbf, 0x90, 0x67, 0x98, 0x67, 0x25, 0x99, 0xd0, 0x9a, 0xae, 0x68, 0xd5, 0x9b, 0x7c, - 0x69, 0xfc, 0x88, 0xf1, 0xec, 0x2a, 0xa4, 0xba, 0xa4, 0x3d, 0xc8, 0xe8, 0x3a, 0xca, 0xd2, 0x40, - 0xeb, 0x53, 0xd9, 0x7e, 0xca, 0xd6, 0x03, 0x7d, 0x0a, 0x05, 0x4c, 0x58, 0xcf, 0xe7, 0x72, 0x48, - 0x56, 0xa9, 0x5f, 0x9e, 0x20, 0x5d, 0x11, 0xc9, 0x1c, 0xad, 0x19, 0xd0, 0x8f, 0xa1, 0xa8, 0x56, - 0xcc, 0xac, 0x4c, 0x9a, 0x06, 0x65, 0x68, 0xa6, 0x79, 0x74, 0xaf, 0xa9, 0x21, 0x71, 0x1d, 0x3f, - 0x23, 0x01, 0xd1, 0xc3, 0xdb, 0xea, 0x8a, 0xb1, 0x3a, 0x8b, 0x13, 0x18, 0x54, 0x87, 0x59, 0x4e, - 0xdd, 0x16, 0x31, 0xe7, 0xa6, 0x30, 0xa1, 0x22, 0x15, 0x2f, 0x5a, 0xe4, 0x05, 0x01, 0x69, 0x9b, - 0xf3, 0xaa, 0x44, 0x56, 0x10, 0xfa, 0x36, 0xcc, 0x07, 0xbd, 0xae, 0xec, 0x23, 0xdb, 0xbb, 0x9c, - 0x44, 0xcc, 0x3c, 0x27, 0xbf, 0x37, 0x82, 0x45, 0x57, 0x60, 0x2e, 0xe8, 0x75, 0xf7, 0x44, 0x69, - 0xa7, 0xc8, 0x16, 0x24, 0x59, 0x1a, 0x89, 0xae, 0xc3, 0xa2, 0xe0, 0x8b, 0xbd, 0xad, 0x28, 0x17, - 0x25, 0xe5, 0xf8, 0xc6, 0x3b, 0x18, 0xa7, 0xbc, 0x8b, 0x66, 0xd1, 0x7a, 0x06, 0xd5, 0xa4, 0x1f, - 0x32, 0x78, 0x6f, 0xa5, 0x87, 0x31, 0x53, 0xc4, 0x45, 0xa2, 0x17, 0x7d, 0x06, 0xff, 0xff, 0x24, - 0x6a, 0xbb, 0x9c, 0x64, 0x65, 0xde, 0xf1, 0x0c, 0x74, 0x11, 0x0a, 0x3b, 0xca, 0x51, 0x6a, 0xa8, - 0xad, 0x21, 0x81, 0x6f, 0x10, 0x61, 0x3c, 0x9d, 0x6e, 0x35, 0x64, 0x5f, 0x02, 0x2b, 0x4b, 0xbc, - 0x7e, 0x06, 0x7f, 0x9f, 0x03, 0x18, 0x06, 0x03, 0xfa, 0x00, 0xa0, 0x4b, 0xda, 0x9e, 0xfb, 0x53, - 0x3e, 0x9c, 0x35, 0x94, 0x25, 0x46, 0x0e, 0x1c, 0x86, 0x3d, 0x5f, 0xee, 0xad, 0x7b, 0x3e, 0x04, - 0x33, 0xcc, 0xfb, 0x9a, 0xe8, 0xfa, 0x54, 0xae, 0xd1, 0x63, 0xa8, 0xb8, 0x41, 0x10, 0x72, 0x19, - 0xc6, 0xf1, 0x1c, 0xe6, 0xc6, 0x49, 0xe1, 0xeb, 0x6c, 0x0c, 0xe9, 0xd5, 0x2d, 0x49, 0x4a, 0xb0, - 0xee, 0xc2, 0xc2, 0x28, 0xc1, 0x99, 0xe6, 0x04, 0xbf, 0x30, 0xe0, 0xdc, 0x88, 0xeb, 0xd0, 0xc7, - 0x83, 0x2c, 0x60, 0x4c, 0x71, 0xbd, 0xe2, 0x04, 0x70, 0x0f, 0xaa, 0x1b, 0x9c, 0x8b, 0xac, 0xc7, - 0x75, 0xdd, 0x92, 0x3f, 0x95, 0x37, 0xc5, 0x61, 0xff, 0xd6, 0x18, 0x8e, 0xc0, 0x33, 0xc7, 0x41, - 0x77, 0xd2, 0xe3, 0xa0, 0xab, 0x93, 0x1f, 0x87, 0x77, 0x39, 0x05, 0xba, 0xf6, 0x43, 0xb8, 0x90, - 0xf9, 0x30, 0xa3, 0x0a, 0x14, 0x77, 0xf7, 0x36, 0xf0, 0x5e, 0xb3, 0xb1, 0xf0, 0x1e, 0xaa, 0x42, - 0x69, 0xeb, 0xf1, 0xa3, 0x9d, 0x87, 0xcd, 0xbd, 0xe6, 0x82, 0x21, 0xb6, 0x1a, 0x4d, 0xb1, 0x6e, - 0x2c, 0xe4, 0xea, 0x7f, 0x28, 0x41, 0x71, 0x4b, 0xfd, 0x0d, 0x88, 0xf6, 0xa0, 0x3c, 0xf8, 0x7f, - 0x08, 0xd9, 0x19, 0xd6, 0x19, 0xf9, 0xa3, 0xc9, 0xfa, 0xf0, 0x44, 0x1a, 0x9d, 0xb8, 0xef, 0xc3, - 0xac, 0xfc, 0xa7, 0x0c, 0x65, 0xcc, 0x55, 0x92, 0x7f, 0xa1, 0x59, 0x27, 0xff, 0xf3, 0xb4, 0x66, - 0x08, 0x49, 0x72, 0x6c, 0x95, 0x25, 0x29, 0x39, 0xd7, 0xb6, 0x96, 0x4f, 0x99, 0x77, 0xa1, 0x47, - 0x50, 0xd0, 0x9d, 0x7a, 0x16, 0x69, 0x72, 0x38, 0x65, 0xad, 0x4c, 0x26, 0x50, 0xc2, 0xd6, 0x0c, - 0xf4, 0x68, 0xf0, 0x57, 0x45, 0x96, 0x6a, 0xc9, 0x36, 0xc7, 0x3a, 0x65, 0x7f, 0xd5, 0x58, 0x33, - 0xd0, 0x97, 0x50, 0x49, 0x34, 0x32, 0x28, 0xa3, 0x9a, 0x1a, 0xef, 0x8a, 0xac, 0xab, 0xa7, 0x50, - 0xe9, 0x93, 0x37, 0x61, 0x46, 0x5e, 0xa4, 0x0c, 0x63, 0x27, 0xfa, 0x9c, 0x2c, 0x35, 0x53, 0x6d, - 0x4f, 0x0b, 0xe6, 0xd3, 0x6d, 0x04, 0xca, 0x28, 0x19, 0x33, 0x3b, 0x10, 0x6b, 0xf5, 0x74, 0x42, - 0xfd, 0x91, 0x9f, 0xc8, 0x77, 0x5b, 0x74, 0x0e, 0x28, 0xc3, 0x0b, 0xe9, 0x36, 0xc3, 0xba, 0x7c, - 0x02, 0x45, 0x42, 0xe9, 0x54, 0x87, 0x90, 0xa9, 0x74, 0x56, 0x63, 0x92, 0xa9, 0x74, 0x76, 0x9f, - 0xb2, 0xaf, 0x7a, 0x56, 0x12, 0x24, 0xef, 0x25, 0xba, 0x7a, 0x5a, 0xc5, 0x31, 0xf1, 0x42, 0x8d, - 0x5d, 0xef, 0x35, 0x03, 0x85, 0x80, 0xc6, 0x9f, 0x15, 0xf4, 0xdd, 0x8c, 0xfb, 0x33, 0xe9, 0x6d, - 0xb3, 0xae, 0x4f, 0x47, 0xac, 0x0e, 0xb5, 0x59, 0x7d, 0xf9, 0x7a, 0xc9, 0xf8, 0xdb, 0xeb, 0x25, - 0xe3, 0x1f, 0xaf, 0x97, 0x8c, 0xfd, 0x82, 0xac, 0x25, 0xbf, 0xf7, 0xbf, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xbb, 0xc3, 0xfe, 0x61, 0x40, 0x20, 0x00, 0x00, -======= - // 2315 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4f, 0x73, 0x1b, 0x49, - 0x15, 0xcf, 0x48, 0xb2, 0x2c, 0x3d, 0xc9, 0x8e, 0xdc, 0xc9, 0x86, 0x61, 0xc8, 0xda, 0xce, 0x6c, - 0x02, 0xae, 0x90, 0x8c, 0xbc, 0x82, 0x90, 0xac, 0x03, 0x21, 0xb6, 0x25, 0x36, 0x0e, 0x49, 0xc5, - 0xdb, 0x76, 0x36, 0xd4, 0x56, 0x05, 0x6a, 0x2c, 0xb5, 0x95, 0x29, 0x8f, 0x66, 0x86, 0xee, 0x96, - 0x37, 0xde, 0x13, 0x27, 0xaa, 0xb8, 0x50, 0x5c, 0x28, 0x2e, 0xdc, 0x39, 0x71, 0xe6, 0xcc, 0x81, - 0xaa, 0x1c, 0x39, 0xef, 0x21, 0x50, 0xf9, 0x00, 0x14, 0x47, 0xb8, 0x6d, 0xf5, 0x9f, 0x91, 0x46, - 0x9a, 0x91, 0x2d, 0x25, 0x39, 0xa9, 0x5f, 0xf7, 0xfb, 0xbd, 0x79, 0xef, 0xf5, 0xeb, 0xd7, 0xef, - 0xb5, 0x60, 0xa1, 0x1d, 0x06, 0x9c, 0x86, 0xbe, 0x13, 0xd1, 0x90, 0x87, 0xa8, 0xd6, 0x0b, 0x0f, - 0x4e, 0x9c, 0x83, 0xbe, 0xe7, 0x77, 0x8e, 0x3c, 0xee, 0x1c, 0x7f, 0x6c, 0x35, 0xba, 0x1e, 0x7f, - 0xd1, 0x3f, 0x70, 0xda, 0x61, 0xaf, 0xde, 0x0d, 0xbb, 0x61, 0xbd, 0x1b, 0x86, 0x5d, 0x9f, 0xb8, - 0x91, 0xc7, 0xf4, 0xb0, 0x4e, 0xa3, 0x76, 0x9d, 0x71, 0x97, 0xf7, 0x99, 0x92, 0x62, 0xdd, 0x1c, - 0xc7, 0xc8, 0xe9, 0x83, 0xfe, 0xa1, 0xa4, 0x24, 0x21, 0x47, 0x9a, 0xbd, 0x9e, 0x60, 0x17, 0xdf, - 0xaf, 0xc7, 0xdf, 0xaf, 0xbb, 0x91, 0x57, 0xe7, 0x27, 0x11, 0x61, 0xf5, 0x2f, 0x43, 0x7a, 0x44, - 0xa8, 0x06, 0xdc, 0x98, 0x08, 0x60, 0xa1, 0x7f, 0x4c, 0x68, 0x3d, 0x3a, 0xa8, 0x87, 0x51, 0xac, - 0xcd, 0xad, 0x53, 0xb8, 0xfb, 0xb4, 0x4d, 0xa2, 0xd0, 0xf7, 0xda, 0x27, 0x02, 0xa3, 0x46, 0x1a, - 0xb6, 0xa2, 0xad, 0x1b, 0xe8, 0xce, 0xbd, 0x1e, 0x61, 0xdc, 0xed, 0x45, 0x8a, 0xc1, 0xfe, 0xad, - 0x01, 0xd5, 0x5d, 0xda, 0x0f, 0x08, 0x26, 0xbf, 0xee, 0x13, 0xc6, 0xd1, 0x25, 0x28, 0x1e, 0x7a, - 0x3e, 0x27, 0xd4, 0x34, 0x56, 0xf3, 0x6b, 0x65, 0xac, 0x29, 0x54, 0x83, 0xbc, 0xeb, 0xfb, 0x66, - 0x6e, 0xd5, 0x58, 0x2b, 0x61, 0x31, 0x44, 0x6b, 0x50, 0x3d, 0x22, 0x24, 0x6a, 0xf6, 0xa9, 0xcb, - 0xbd, 0x30, 0x30, 0xf3, 0xab, 0xc6, 0x5a, 0x7e, 0xab, 0xf0, 0xea, 0xf5, 0x8a, 0x81, 0x47, 0x56, - 0x90, 0x0d, 0x65, 0x41, 0x6f, 0x9d, 0x70, 0xc2, 0xcc, 0x42, 0x82, 0x6d, 0x38, 0x6d, 0x5f, 0x87, - 0x5a, 0xd3, 0x63, 0x47, 0x4f, 0x99, 0xdb, 0x3d, 0x4b, 0x17, 0xfb, 0x21, 0x2c, 0x25, 0x78, 0x59, - 0x14, 0x06, 0x8c, 0xa0, 0x5b, 0x50, 0xa4, 0xa4, 0x1d, 0xd2, 0x8e, 0x64, 0xae, 0x34, 0x3e, 0x74, - 0xc6, 0xc3, 0xc0, 0xd1, 0x00, 0xc1, 0x84, 0x35, 0xb3, 0xfd, 0xa7, 0x3c, 0x54, 0x12, 0xf3, 0x68, - 0x11, 0x72, 0x3b, 0x4d, 0xd3, 0x58, 0x35, 0xd6, 0xca, 0x38, 0xb7, 0xd3, 0x44, 0x26, 0xcc, 0x3f, - 0xee, 0x73, 0xf7, 0xc0, 0x27, 0xda, 0xf6, 0x98, 0x44, 0x17, 0x61, 0x6e, 0x27, 0x78, 0xca, 0x88, - 0x34, 0xbc, 0x84, 0x15, 0x81, 0x10, 0x14, 0xf6, 0xbc, 0xaf, 0x88, 0x32, 0x13, 0xcb, 0x31, 0xb2, - 0xa0, 0xb8, 0xeb, 0x52, 0x12, 0x70, 0x73, 0x4e, 0xc8, 0xdd, 0xca, 0x99, 0x06, 0xd6, 0x33, 0x68, - 0x0b, 0xca, 0xdb, 0x94, 0xb8, 0x9c, 0x74, 0x36, 0xb9, 0x59, 0x5c, 0x35, 0xd6, 0x2a, 0x0d, 0xcb, - 0x51, 0xbb, 0xe6, 0xc4, 0xbb, 0xe6, 0xec, 0xc7, 0xbb, 0xb6, 0x55, 0x7a, 0xf5, 0x7a, 0xe5, 0xdc, - 0x1f, 0xfe, 0x25, 0x7c, 0x37, 0x80, 0xa1, 0xfb, 0x00, 0x8f, 0x5c, 0xc6, 0x9f, 0x32, 0x29, 0x64, - 0xfe, 0x4c, 0x21, 0x05, 0x29, 0x20, 0x81, 0x41, 0xcb, 0x00, 0xd2, 0x09, 0xdb, 0x61, 0x3f, 0xe0, - 0x66, 0x49, 0xea, 0x9e, 0x98, 0x41, 0xab, 0x50, 0x69, 0x12, 0xd6, 0xa6, 0x5e, 0x24, 0xb7, 0xba, - 0x2c, 0xdd, 0x93, 0x9c, 0x12, 0x12, 0x94, 0x07, 0xf7, 0x4f, 0x22, 0x62, 0x82, 0x64, 0x48, 0xcc, - 0x88, 0xbd, 0xdc, 0x7b, 0xe1, 0x52, 0xd2, 0x31, 0x2b, 0xd2, 0x5d, 0x9a, 0x12, 0xfe, 0x55, 0x9e, - 0x60, 0x66, 0x55, 0x6e, 0x72, 0x4c, 0xda, 0xbf, 0x29, 0x41, 0x75, 0x4f, 0x1c, 0x85, 0x38, 0x1c, - 0x6a, 0x90, 0xc7, 0xe4, 0x50, 0xef, 0x8d, 0x18, 0x22, 0x07, 0xa0, 0x49, 0x0e, 0xbd, 0xc0, 0x93, - 0x5a, 0xe5, 0xa4, 0xe1, 0x8b, 0x4e, 0x74, 0xe0, 0x0c, 0x67, 0x71, 0x82, 0x03, 0x39, 0x80, 0x5a, - 0x2f, 0xa3, 0x90, 0x72, 0x42, 0x9b, 0x24, 0xa2, 0xa4, 0x2d, 0x1c, 0x28, 0xf7, 0xaf, 0x8c, 0x33, - 0x56, 0x50, 0x1f, 0xbe, 0x15, 0xcf, 0x6e, 0x72, 0x4e, 0x59, 0x02, 0x54, 0x90, 0x41, 0x76, 0x37, - 0x1d, 0x64, 0x49, 0x95, 0x9d, 0x09, 0xe8, 0x56, 0xc0, 0xe9, 0x09, 0x9e, 0x24, 0x5b, 0xf8, 0x64, - 0x8f, 0x30, 0x26, 0x6c, 0x92, 0x01, 0x83, 0x63, 0x12, 0x59, 0x50, 0xfa, 0x19, 0x0d, 0x03, 0x4e, - 0x82, 0x8e, 0x0c, 0x96, 0x32, 0x1e, 0xd0, 0xe8, 0x19, 0x2c, 0xc4, 0x63, 0x29, 0xd0, 0x9c, 0x97, - 0x2a, 0x7e, 0x7c, 0x86, 0x8a, 0x23, 0x18, 0xa5, 0xd8, 0xa8, 0x1c, 0xb4, 0x01, 0x73, 0xdb, 0x6e, - 0xfb, 0x05, 0x91, 0x71, 0x51, 0x69, 0x2c, 0xa7, 0x05, 0xca, 0xe5, 0x27, 0x32, 0x10, 0x98, 0x3c, - 0xda, 0xe7, 0xb0, 0x82, 0xa0, 0x5f, 0x42, 0xb5, 0x15, 0x70, 0x8f, 0xfb, 0xa4, 0x27, 0xf7, 0xb8, - 0x2c, 0xf6, 0x78, 0x6b, 0xe3, 0xeb, 0xd7, 0x2b, 0x3f, 0x9a, 0x98, 0xd1, 0xfa, 0xdc, 0xf3, 0xeb, - 0x24, 0x81, 0x72, 0x12, 0x22, 0xf0, 0x88, 0x3c, 0xf4, 0x05, 0x2c, 0xc6, 0xca, 0xee, 0x04, 0x51, - 0x9f, 0x33, 0x13, 0xa4, 0xd5, 0x8d, 0x29, 0xad, 0x56, 0x20, 0x65, 0xf6, 0x98, 0x24, 0xe1, 0xec, - 0x9d, 0x80, 0x13, 0x1a, 0xb8, 0xbe, 0x0e, 0xda, 0x01, 0x8d, 0x76, 0x44, 0x6c, 0x8a, 0xc4, 0xbb, - 0x2b, 0xd3, 0xad, 0x59, 0x95, 0xae, 0xb9, 0x96, 0xfe, 0x6a, 0x32, 0x3d, 0x3b, 0x8a, 0x19, 0x8f, - 0x40, 0xd1, 0x1d, 0x28, 0xc7, 0x81, 0xc0, 0xcc, 0x05, 0xa9, 0xbd, 0x95, 0x96, 0x13, 0xb3, 0xe0, - 0x21, 0xb3, 0xf5, 0x10, 0x2e, 0x9f, 0x16, 0x60, 0xe2, 0xc0, 0x1c, 0x91, 0x93, 0xf8, 0xc0, 0x1c, - 0x91, 0x13, 0x91, 0xb3, 0x8e, 0x5d, 0xbf, 0xaf, 0x72, 0x59, 0x19, 0x2b, 0x62, 0x23, 0x77, 0xc7, - 0xb0, 0xee, 0x03, 0x4a, 0x47, 0xc2, 0x4c, 0x12, 0x3e, 0x83, 0x0b, 0x19, 0x5e, 0xcd, 0x10, 0x71, - 0x35, 0x29, 0x22, 0x7d, 0x60, 0x87, 0x22, 0xed, 0xbf, 0xe6, 0xa1, 0x9a, 0x8c, 0x2d, 0xb4, 0x0e, - 0x17, 0x94, 0xc5, 0x98, 0x1c, 0x26, 0x0e, 0xa3, 0x12, 0x9e, 0xb5, 0x84, 0x1a, 0x70, 0x71, 0xa7, - 0xa7, 0xa7, 0x93, 0xe7, 0x37, 0x27, 0x93, 0x4d, 0xe6, 0x1a, 0x0a, 0xe1, 0x03, 0x25, 0x6a, 0xfc, - 0xd0, 0xe7, 0xe5, 0xee, 0x7c, 0x72, 0xfa, 0x01, 0x70, 0x32, 0xb1, 0x2a, 0xc4, 0xb2, 0xe5, 0xa2, - 0x9f, 0xc0, 0xbc, 0x5a, 0x60, 0x3a, 0xaf, 0x7c, 0x74, 0xfa, 0x27, 0x94, 0xb0, 0x18, 0x23, 0xe0, - 0xca, 0x0e, 0x66, 0xce, 0xcd, 0x00, 0xd7, 0x18, 0xeb, 0x01, 0x58, 0x93, 0x55, 0x9e, 0x25, 0x04, - 0xec, 0xbf, 0x18, 0xb0, 0x94, 0xfa, 0x90, 0xb8, 0x12, 0xe5, 0xa5, 0xa0, 0x44, 0xc8, 0x31, 0x6a, - 0xc2, 0x9c, 0x4a, 0x52, 0x39, 0xa9, 0xb0, 0x33, 0x85, 0xc2, 0x4e, 0x22, 0x43, 0x29, 0xb0, 0x75, - 0x07, 0xe0, 0xed, 0x82, 0xd5, 0xfe, 0x9b, 0x01, 0x0b, 0x3a, 0x21, 0xe8, 0xfa, 0xc1, 0x85, 0xda, - 0xe0, 0x8c, 0xe9, 0x39, 0x5d, 0x49, 0xdc, 0x9a, 0x98, 0x4b, 0x14, 0x9b, 0x33, 0x8e, 0x53, 0x3a, - 0xa6, 0xc4, 0x59, 0xdb, 0x71, 0x5c, 0x8d, 0xb1, 0xce, 0xa4, 0xf9, 0x15, 0x58, 0xd8, 0x93, 0x75, - 0xea, 0xc4, 0x6b, 0xd1, 0xfe, 0xaf, 0x01, 0x8b, 0x31, 0x8f, 0xb6, 0xee, 0x87, 0x50, 0x3a, 0x26, - 0x94, 0x93, 0x97, 0x84, 0x69, 0xab, 0xcc, 0xb4, 0x55, 0x9f, 0x4b, 0x0e, 0x3c, 0xe0, 0x44, 0x1b, - 0x50, 0x52, 0x35, 0x31, 0x89, 0x37, 0x6a, 0x79, 0x12, 0x4a, 0x7f, 0x6f, 0xc0, 0x8f, 0xea, 0x50, - 0xf0, 0xc3, 0x2e, 0xd3, 0x67, 0xe6, 0x3b, 0x93, 0x70, 0x8f, 0xc2, 0x2e, 0x96, 0x8c, 0xe8, 0x2e, - 0x94, 0xbe, 0x74, 0x69, 0xe0, 0x05, 0xdd, 0xf8, 0x14, 0xac, 0x4c, 0x02, 0x3d, 0x53, 0x7c, 0x78, - 0x00, 0x10, 0x65, 0x5c, 0x51, 0xad, 0xa1, 0x87, 0x50, 0xec, 0x78, 0x5d, 0xc2, 0xb8, 0x72, 0xc9, - 0x56, 0x43, 0xdc, 0x47, 0x5f, 0xbf, 0x5e, 0xb9, 0x9e, 0xb8, 0x70, 0xc2, 0x88, 0x04, 0xa2, 0x69, - 0x70, 0xbd, 0x80, 0x50, 0xd1, 0x03, 0xdc, 0x54, 0x10, 0xa7, 0x29, 0x7f, 0xb0, 0x96, 0x20, 0x64, - 0x79, 0xea, 0x5a, 0x91, 0xf9, 0xe2, 0xed, 0x64, 0x29, 0x09, 0xe2, 0x18, 0x04, 0x6e, 0x8f, 0xe8, - 0x72, 0x43, 0x8e, 0x45, 0x55, 0xd4, 0x16, 0x71, 0xde, 0x91, 0xf5, 0x62, 0x09, 0x6b, 0x0a, 0x6d, - 0xc0, 0x3c, 0xe3, 0x2e, 0x15, 0x39, 0x67, 0x6e, 0xca, 0x72, 0x2e, 0x06, 0xa0, 0x7b, 0x50, 0x6e, - 0x87, 0xbd, 0xc8, 0x27, 0x02, 0x5d, 0x9c, 0x12, 0x3d, 0x84, 0x88, 0xd0, 0x23, 0x94, 0x86, 0x54, - 0x16, 0x92, 0x65, 0xac, 0x08, 0x74, 0x1b, 0x16, 0x22, 0x1a, 0x76, 0x29, 0x61, 0xec, 0x53, 0x1a, - 0xf6, 0x23, 0x5d, 0x0c, 0x2c, 0x89, 0xe4, 0xbd, 0x9b, 0x5c, 0xc0, 0xa3, 0x7c, 0xf6, 0x7f, 0x72, - 0x50, 0x4d, 0x86, 0x48, 0xaa, 0xc2, 0x7e, 0x08, 0x45, 0x15, 0x70, 0x2a, 0xd6, 0xdf, 0xce, 0xc7, - 0x4a, 0x42, 0xa6, 0x8f, 0x4d, 0x98, 0x6f, 0xf7, 0xa9, 0x2c, 0xbf, 0x55, 0x51, 0x1e, 0x93, 0xc2, - 0x52, 0x1e, 0x72, 0xd7, 0x97, 0x3e, 0xce, 0x63, 0x45, 0x88, 0x8a, 0x7c, 0xd0, 0x25, 0xcd, 0x56, - 0x91, 0x0f, 0x60, 0xc9, 0xfd, 0x9b, 0x7f, 0xa7, 0xfd, 0x2b, 0xcd, 0xbc, 0x7f, 0xf6, 0x3f, 0x0c, - 0x28, 0x0f, 0xce, 0x56, 0xc2, 0xbb, 0xc6, 0x3b, 0x7b, 0x77, 0xc4, 0x33, 0xb9, 0xb7, 0xf3, 0xcc, - 0x25, 0x28, 0x32, 0x4e, 0x89, 0xdb, 0x53, 0xfd, 0x22, 0xd6, 0x94, 0xc8, 0x62, 0x3d, 0xd6, 0x95, - 0x3b, 0x54, 0xc5, 0x62, 0x68, 0xff, 0xcf, 0x80, 0x85, 0x91, 0xe3, 0xfe, 0x5e, 0x6d, 0xb9, 0x08, - 0x73, 0x3e, 0x39, 0x26, 0xaa, 0xa3, 0xcd, 0x63, 0x45, 0x88, 0x59, 0xf6, 0x22, 0xa4, 0x5c, 0x2a, - 0x57, 0xc5, 0x8a, 0x10, 0x3a, 0x77, 0x08, 0x77, 0x3d, 0x5f, 0xe6, 0xa5, 0x2a, 0xd6, 0x94, 0xd0, - 0xb9, 0x4f, 0x7d, 0x5d, 0xa3, 0x8b, 0x21, 0xb2, 0xa1, 0xe0, 0x05, 0x87, 0xa1, 0x0e, 0x1b, 0x59, - 0xd9, 0xa8, 0x5a, 0x6f, 0x27, 0x38, 0x0c, 0xb1, 0x5c, 0x43, 0x57, 0xa0, 0x48, 0xdd, 0xa0, 0x4b, - 0xe2, 0x02, 0xbd, 0x2c, 0xb8, 0xb0, 0x98, 0xc1, 0x7a, 0xc1, 0xb6, 0xa1, 0x2a, 0xbb, 0xe2, 0xc7, - 0x84, 0x89, 0x1e, 0x4c, 0x84, 0x75, 0xc7, 0xe5, 0xae, 0x34, 0xbb, 0x8a, 0xe5, 0xd8, 0xbe, 0x01, - 0xe8, 0x91, 0xc7, 0xf8, 0x33, 0xf9, 0xa6, 0xc0, 0xce, 0x6a, 0x99, 0xf7, 0xe0, 0xc2, 0x08, 0xb7, - 0xbe, 0x16, 0x7e, 0x3c, 0xd6, 0x34, 0x5f, 0x4d, 0x67, 0x5c, 0xf9, 0x74, 0xe1, 0x28, 0xe0, 0x58, - 0xef, 0xbc, 0x00, 0x15, 0x69, 0x97, 0xfa, 0xb6, 0xed, 0x42, 0x55, 0x91, 0x5a, 0xf8, 0x67, 0x70, - 0x3e, 0x16, 0xf4, 0x39, 0xa1, 0xb2, 0x9d, 0x31, 0xa4, 0x5f, 0xbe, 0x37, 0xe9, 0x2b, 0x5b, 0xa3, - 0xec, 0x78, 0x1c, 0x6f, 0x13, 0xb8, 0x20, 0x79, 0x1e, 0x78, 0x8c, 0x87, 0xf4, 0x24, 0xb6, 0x7a, - 0x19, 0x60, 0xb3, 0xcd, 0xbd, 0x63, 0xf2, 0x24, 0xf0, 0xd5, 0x35, 0x5a, 0xc2, 0x89, 0x99, 0xf8, - 0x8a, 0xcc, 0x0d, 0x3b, 0xc7, 0xcb, 0x50, 0x6e, 0xb9, 0xd4, 0x3f, 0x69, 0xbd, 0xf4, 0xb8, 0x6e, - 0xe0, 0x87, 0x13, 0xf6, 0xef, 0x0d, 0x58, 0x4a, 0x7e, 0xa7, 0x75, 0x2c, 0xd2, 0xc5, 0x5d, 0x28, - 0xf0, 0xb8, 0x8e, 0x59, 0xcc, 0x32, 0x22, 0x05, 0x11, 0xa5, 0x0e, 0x96, 0xa0, 0x84, 0xa7, 0xd5, - 0xc1, 0xb9, 0x7a, 0x3a, 0x7c, 0xcc, 0xd3, 0xff, 0x2f, 0x01, 0x4a, 0x2f, 0x67, 0x74, 0xc4, 0xc9, - 0x06, 0x31, 0x37, 0xd6, 0x20, 0x3e, 0x1f, 0x6f, 0x10, 0xd5, 0xd5, 0x7c, 0x7b, 0x1a, 0x4d, 0xa6, - 0x68, 0x13, 0x47, 0xfa, 0x98, 0xc2, 0x0c, 0x7d, 0x0c, 0x5a, 0x8b, 0x6f, 0x1c, 0x75, 0xd7, 0xa1, - 0x38, 0xa7, 0xd0, 0xa8, 0xed, 0xe8, 0xba, 0x42, 0xdf, 0x42, 0xf7, 0x66, 0x7b, 0x2d, 0x29, 0x8c, - 0xbf, 0x94, 0x6c, 0x41, 0x65, 0x3b, 0x4e, 0x94, 0x33, 0x3c, 0x95, 0x24, 0x41, 0x68, 0x5d, 0x17, - 0x36, 0x2a, 0x35, 0x5f, 0x4e, 0x9b, 0x18, 0x3f, 0x8b, 0x84, 0x54, 0x57, 0x36, 0x87, 0x19, 0xa5, - 0x65, 0x59, 0x3a, 0x68, 0x63, 0x2a, 0xdf, 0x4f, 0x59, 0x5f, 0xa2, 0x4f, 0xa0, 0x88, 0x09, 0xeb, - 0xfb, 0x5c, 0xbe, 0xbf, 0x54, 0x1a, 0x57, 0x26, 0x48, 0x57, 0x4c, 0xf2, 0xac, 0x6a, 0x00, 0xfa, - 0x39, 0xcc, 0xab, 0x11, 0x33, 0x2b, 0x93, 0x9e, 0x0d, 0x32, 0x34, 0xd3, 0x18, 0xdd, 0x50, 0x68, - 0x4a, 0x1c, 0xc7, 0x4f, 0x49, 0x40, 0xf4, 0xbb, 0xa0, 0x68, 0x8d, 0xe7, 0x70, 0x62, 0x06, 0x35, - 0x60, 0x8e, 0x53, 0xb7, 0x4d, 0xcc, 0x85, 0x29, 0x5c, 0xa8, 0x58, 0x45, 0x62, 0x8b, 0xbc, 0x20, - 0x20, 0x1d, 0x73, 0x51, 0x55, 0x4a, 0x8a, 0x42, 0xdf, 0x85, 0xc5, 0xa0, 0xdf, 0x93, 0xcd, 0x42, - 0x67, 0x8f, 0x93, 0x88, 0x99, 0xe7, 0xe5, 0xf7, 0xc6, 0x66, 0xd1, 0x55, 0x58, 0x08, 0xfa, 0xbd, - 0x7d, 0x71, 0xc3, 0x2b, 0xb6, 0x9a, 0x64, 0x1b, 0x9d, 0x44, 0x37, 0x60, 0x49, 0xe0, 0xe2, 0xdd, - 0x56, 0x9c, 0x4b, 0x92, 0x33, 0xbd, 0xf0, 0x1e, 0x7a, 0xe6, 0xf7, 0xd1, 0x11, 0x58, 0xcf, 0xa1, - 0x9a, 0xdc, 0x87, 0x0c, 0xec, 0xed, 0xd1, 0x8e, 0x7b, 0x8a, 0xb8, 0x48, 0x34, 0x1c, 0xcf, 0xe1, - 0xdb, 0x4f, 0xa3, 0x8e, 0xcb, 0x49, 0x56, 0xe6, 0x4d, 0x67, 0xa0, 0x4b, 0x50, 0xdc, 0x55, 0x1b, - 0xa5, 0xde, 0x4b, 0x35, 0x25, 0xe6, 0x9b, 0x44, 0x38, 0x4f, 0xa7, 0x5b, 0x4d, 0xd9, 0x97, 0xc1, - 0xca, 0x12, 0xaf, 0x9c, 0x61, 0xff, 0x39, 0x07, 0x30, 0x0c, 0x06, 0xf4, 0x21, 0x40, 0x8f, 0x74, - 0x3c, 0xf7, 0x57, 0x7c, 0xd8, 0x50, 0x96, 0xe5, 0x8c, 0xec, 0x2a, 0x87, 0xa5, 0x7f, 0xee, 0x9d, - 0x4b, 0x7f, 0x04, 0x05, 0xe6, 0x7d, 0x45, 0x74, 0x99, 0x22, 0xc7, 0xe8, 0x09, 0x54, 0xdc, 0x20, - 0x08, 0xb9, 0x0c, 0xe3, 0xb8, 0xd9, 0xbe, 0x79, 0x5a, 0xf8, 0x3a, 0x9b, 0x43, 0x7e, 0x75, 0x4a, - 0x92, 0x12, 0xac, 0x7b, 0x50, 0x1b, 0x67, 0x98, 0xa9, 0x19, 0xfc, 0x7b, 0x0e, 0xce, 0x8f, 0x6d, - 0x1d, 0x7a, 0x00, 0x35, 0x45, 0x8d, 0x3d, 0x90, 0x9c, 0x75, 0xd0, 0x52, 0x28, 0x74, 0x1f, 0xaa, - 0x9b, 0x9c, 0x8b, 0x4c, 0xa8, 0xec, 0x55, 0x2d, 0xe0, 0xe9, 0x52, 0x46, 0x10, 0xe8, 0xc1, 0x30, - 0xad, 0xe4, 0x27, 0x35, 0xfa, 0x63, 0xfa, 0x67, 0xe7, 0x14, 0xeb, 0x17, 0x93, 0x83, 0x3c, 0xaf, - 0xbc, 0xd4, 0x18, 0x0d, 0xf2, 0x33, 0xb2, 0xca, 0xd0, 0x87, 0x7f, 0x34, 0xa0, 0x14, 0x1f, 0xc2, - 0xcc, 0xb7, 0x8a, 0xbb, 0xa3, 0x6f, 0x15, 0xd7, 0x26, 0x5f, 0x6a, 0xef, 0xf3, 0x89, 0xe2, 0xfa, - 0x4f, 0xe1, 0x83, 0xcc, 0x82, 0x02, 0x55, 0x60, 0x7e, 0x6f, 0x7f, 0x13, 0xef, 0xb7, 0x9a, 0xb5, - 0x73, 0xa8, 0x0a, 0xa5, 0xed, 0x27, 0x8f, 0x77, 0x1f, 0xb5, 0xf6, 0x5b, 0x35, 0x43, 0x2c, 0x35, - 0x5b, 0x62, 0xdc, 0xac, 0xe5, 0x1a, 0xbf, 0x2b, 0xc2, 0xfc, 0xb6, 0xfa, 0x67, 0x0c, 0xed, 0x43, - 0x79, 0xf0, 0x97, 0x09, 0xb2, 0x33, 0x5c, 0x33, 0xf6, 0xdf, 0x8b, 0xf5, 0xd1, 0xa9, 0x3c, 0xfa, - 0xc2, 0x79, 0x00, 0x73, 0xf2, 0xcf, 0x23, 0x94, 0xf1, 0x2c, 0x90, 0xfc, 0x57, 0xc9, 0x3a, 0xfd, - 0xcf, 0x98, 0x75, 0x43, 0x48, 0x92, 0x6f, 0x2a, 0x59, 0x92, 0x92, 0x0f, 0xb7, 0xd6, 0xca, 0x19, - 0x8f, 0x31, 0xe8, 0x31, 0x14, 0x75, 0xa3, 0x99, 0xc5, 0x9a, 0x7c, 0x39, 0xb1, 0x56, 0x27, 0x33, - 0x28, 0x61, 0xeb, 0x06, 0x7a, 0x3c, 0x78, 0x8b, 0xcf, 0x52, 0x2d, 0x59, 0xa5, 0x5b, 0x67, 0xac, - 0xaf, 0x19, 0xeb, 0x06, 0xfa, 0x02, 0x2a, 0x89, 0x3a, 0x1c, 0x65, 0x54, 0x81, 0xe9, 0xa2, 0xde, - 0xba, 0x76, 0x06, 0x97, 0xb6, 0xbc, 0x05, 0x05, 0x99, 0x00, 0x32, 0x9c, 0x9d, 0x28, 0xd3, 0xb3, - 0xd4, 0x1c, 0x29, 0xdb, 0x0f, 0x54, 0x63, 0x41, 0x82, 0x64, 0xf4, 0xa1, 0x6b, 0x67, 0xd5, 0x03, - 0x13, 0xc3, 0x26, 0x15, 0xc4, 0xeb, 0x06, 0x0a, 0x01, 0xa5, 0x93, 0x3e, 0xfa, 0x7e, 0x46, 0x94, - 0x4c, 0xba, 0x79, 0xac, 0x1b, 0xd3, 0x31, 0x2b, 0xa3, 0xb6, 0xaa, 0xaf, 0xde, 0x2c, 0x1b, 0xff, - 0x7c, 0xb3, 0x6c, 0xfc, 0xfb, 0xcd, 0xb2, 0x71, 0x50, 0x94, 0x95, 0xde, 0x0f, 0xbe, 0x09, 0x00, - 0x00, 0xff, 0xff, 0x16, 0xc8, 0xe5, 0x4c, 0x39, 0x1e, 0x00, 0x00, ->>>>>>> v0.13.2 + // 2540 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x19, 0x4d, 0x73, 0x1b, 0x59, + 0x71, 0x47, 0x92, 0xf5, 0xd1, 0x92, 0x1d, 0xf9, 0x65, 0x37, 0x3b, 0x0c, 0x59, 0xdb, 0x99, 0x4d, + 0xc0, 0x15, 0x92, 0x91, 0x57, 0x90, 0x4d, 0xd6, 0x81, 0x10, 0xdb, 0x32, 0x1b, 0x87, 0x84, 0x78, + 0x9f, 0x9d, 0x0d, 0xb5, 0x55, 0x59, 0x6a, 0x2c, 0x3d, 0xcb, 0x53, 0x1e, 0xcd, 0x0c, 0xef, 0x3d, + 0x39, 0xd1, 0x9e, 0x38, 0x71, 0xa4, 0xa8, 0xa2, 0x28, 0x2e, 0xdc, 0x28, 0x8a, 0x13, 0x67, 0xce, + 0x1c, 0xa8, 0xca, 0x91, 0xf3, 0x1e, 0x02, 0x95, 0x1f, 0x40, 0x71, 0x04, 0x4e, 0xd4, 0xfb, 0x18, + 0x69, 0x24, 0x8d, 0x2c, 0x39, 0xc9, 0x49, 0xaf, 0xfb, 0x75, 0xf7, 0xf4, 0xeb, 0xd7, 0xdd, 0xaf, + 0xbb, 0x05, 0xf3, 0xcd, 0x30, 0xe0, 0x34, 0xf4, 0x9d, 0x88, 0x86, 0x3c, 0x44, 0xd5, 0x4e, 0x78, + 0xd0, 0x73, 0x0e, 0xba, 0x9e, 0xdf, 0x3a, 0xf6, 0xb8, 0x73, 0xf2, 0x91, 0x55, 0x6f, 0x7b, 0xfc, + 0xa8, 0x7b, 0xe0, 0x34, 0xc3, 0x4e, 0xad, 0x1d, 0xb6, 0xc3, 0x5a, 0x3b, 0x0c, 0xdb, 0x3e, 0x71, + 0x23, 0x8f, 0xe9, 0x65, 0x8d, 0x46, 0xcd, 0x1a, 0xe3, 0x2e, 0xef, 0x32, 0x25, 0xc5, 0xba, 0x3e, + 0xca, 0x23, 0xd1, 0x07, 0xdd, 0x43, 0x09, 0x49, 0x40, 0xae, 0x34, 0x79, 0x2d, 0x41, 0x2e, 0xbe, + 0x5f, 0x8b, 0xbf, 0x5f, 0x73, 0x23, 0xaf, 0xc6, 0x7b, 0x11, 0x61, 0xb5, 0x67, 0x21, 0x3d, 0x26, + 0x54, 0x33, 0x5c, 0x9b, 0xc8, 0xc0, 0x42, 0xff, 0x84, 0xd0, 0x5a, 0x74, 0x50, 0x0b, 0xa3, 0x58, + 0x9b, 0x1b, 0xa7, 0x50, 0x77, 0x69, 0x93, 0x44, 0xa1, 0xef, 0x35, 0x7b, 0x82, 0x47, 0xad, 0x34, + 0xdb, 0xb2, 0x3e, 0x5d, 0x5f, 0x77, 0xee, 0x75, 0x08, 0xe3, 0x6e, 0x27, 0x52, 0x04, 0xf6, 0x2f, + 0x0d, 0xa8, 0xec, 0xd2, 0x6e, 0x40, 0x30, 0xf9, 0x79, 0x97, 0x30, 0x8e, 0x2e, 0x40, 0xfe, 0xd0, + 0xf3, 0x39, 0xa1, 0xa6, 0xb1, 0x92, 0x5d, 0x2d, 0x61, 0x0d, 0xa1, 0x2a, 0x64, 0x5d, 0xdf, 0x37, + 0x33, 0x2b, 0xc6, 0x6a, 0x11, 0x8b, 0x25, 0x5a, 0x85, 0xca, 0x31, 0x21, 0x51, 0xa3, 0x4b, 0x5d, + 0xee, 0x85, 0x81, 0x99, 0x5d, 0x31, 0x56, 0xb3, 0x9b, 0xb9, 0x17, 0x2f, 0x97, 0x0d, 0x3c, 0xb4, + 0x83, 0x6c, 0x28, 0x09, 0x78, 0xb3, 0xc7, 0x09, 0x33, 0x73, 0x09, 0xb2, 0x01, 0xda, 0xbe, 0x0a, + 0xd5, 0x86, 0xc7, 0x8e, 0x1f, 0x33, 0xb7, 0x3d, 0x4d, 0x17, 0xfb, 0x3e, 0x2c, 0x26, 0x68, 0x59, + 0x14, 0x06, 0x8c, 0xa0, 0x1b, 0x90, 0xa7, 0xa4, 0x19, 0xd2, 0x96, 0x24, 0x2e, 0xd7, 0x3f, 0x70, + 0x46, 0xdd, 0xc0, 0xd1, 0x0c, 0x82, 0x08, 0x6b, 0x62, 0xfb, 0x77, 0x59, 0x28, 0x27, 0xf0, 0x68, + 0x01, 0x32, 0x3b, 0x0d, 0xd3, 0x58, 0x31, 0x56, 0x4b, 0x38, 0xb3, 0xd3, 0x40, 0x26, 0x14, 0x1e, + 0x76, 0xb9, 0x7b, 0xe0, 0x13, 0x7d, 0xf6, 0x18, 0x44, 0xef, 0xc2, 0xdc, 0x4e, 0xf0, 0x98, 0x11, + 0x79, 0xf0, 0x22, 0x56, 0x00, 0x42, 0x90, 0xdb, 0xf3, 0xbe, 0x22, 0xea, 0x98, 0x58, 0xae, 0x91, + 0x05, 0xf9, 0x5d, 0x97, 0x92, 0x80, 0x9b, 0x73, 0x42, 0xee, 0x66, 0xc6, 0x34, 0xb0, 0xc6, 0xa0, + 0x4d, 0x28, 0x6d, 0x51, 0xe2, 0x72, 0xd2, 0xda, 0xe0, 0x66, 0x7e, 0xc5, 0x58, 0x2d, 0xd7, 0x2d, + 0x47, 0xdd, 0x9a, 0x13, 0xdf, 0x9a, 0xb3, 0x1f, 0xdf, 0xda, 0x66, 0xf1, 0xc5, 0xcb, 0xe5, 0x77, + 0x7e, 0xfd, 0x0f, 0x61, 0xbb, 0x3e, 0x1b, 0xba, 0x0b, 0xf0, 0xc0, 0x65, 0xfc, 0x31, 0x93, 0x42, + 0x0a, 0x53, 0x85, 0xe4, 0xa4, 0x80, 0x04, 0x0f, 0x5a, 0x02, 0x90, 0x46, 0xd8, 0x0a, 0xbb, 0x01, + 0x37, 0x8b, 0x52, 0xf7, 0x04, 0x06, 0xad, 0x40, 0xb9, 0x41, 0x58, 0x93, 0x7a, 0x91, 0xbc, 0xea, + 0x92, 0x34, 0x4f, 0x12, 0x25, 0x24, 0x28, 0x0b, 0xee, 0xf7, 0x22, 0x62, 0x82, 0x24, 0x48, 0x60, + 0xc4, 0x5d, 0xee, 0x1d, 0xb9, 0x94, 0xb4, 0xcc, 0xb2, 0x34, 0x97, 0x86, 0x84, 0x7d, 0x95, 0x25, + 0x98, 0x59, 0x91, 0x97, 0x1c, 0x83, 0xf6, 0x2f, 0x8a, 0x50, 0xd9, 0x13, 0xa1, 0x10, 0xbb, 0x43, + 0x15, 0xb2, 0x98, 0x1c, 0xea, 0xbb, 0x11, 0x4b, 0xe4, 0x00, 0x34, 0xc8, 0xa1, 0x17, 0x78, 0x52, + 0xab, 0x8c, 0x3c, 0xf8, 0x82, 0x13, 0x1d, 0x38, 0x03, 0x2c, 0x4e, 0x50, 0x20, 0x07, 0xd0, 0xf6, + 0xf3, 0x28, 0xa4, 0x9c, 0xd0, 0x06, 0x89, 0x28, 0x69, 0x0a, 0x03, 0xca, 0xfb, 0x2b, 0xe1, 0x94, + 0x1d, 0xd4, 0x85, 0xf7, 0x63, 0xec, 0x06, 0xe7, 0x94, 0x25, 0x98, 0x72, 0xd2, 0xc9, 0x6e, 0x8f, + 0x3b, 0x59, 0x52, 0x65, 0x67, 0x02, 0xf7, 0x76, 0xc0, 0x69, 0x0f, 0x4f, 0x92, 0x2d, 0x6c, 0xb2, + 0x47, 0x18, 0x13, 0x67, 0x92, 0x0e, 0x83, 0x63, 0x10, 0x59, 0x50, 0xfc, 0x11, 0x0d, 0x03, 0x4e, + 0x82, 0x96, 0x74, 0x96, 0x12, 0xee, 0xc3, 0xe8, 0x09, 0xcc, 0xc7, 0x6b, 0x29, 0xd0, 0x2c, 0x48, + 0x15, 0x3f, 0x9a, 0xa2, 0xe2, 0x10, 0x8f, 0x52, 0x6c, 0x58, 0x0e, 0x5a, 0x87, 0xb9, 0x2d, 0xb7, + 0x79, 0x44, 0xa4, 0x5f, 0x94, 0xeb, 0x4b, 0xe3, 0x02, 0xe5, 0xf6, 0x23, 0xe9, 0x08, 0x4c, 0x86, + 0xf6, 0x3b, 0x58, 0xb1, 0xa0, 0x2f, 0xa1, 0xb2, 0x1d, 0x70, 0x8f, 0xfb, 0xa4, 0x23, 0xef, 0xb8, + 0x24, 0xee, 0x78, 0x73, 0xfd, 0xeb, 0x97, 0xcb, 0x1f, 0x4f, 0xcc, 0x68, 0x5d, 0xee, 0xf9, 0x35, + 0x92, 0xe0, 0x72, 0x12, 0x22, 0xf0, 0x90, 0x3c, 0xf4, 0x05, 0x2c, 0xc4, 0xca, 0xee, 0x04, 0x51, + 0x97, 0x33, 0x13, 0xe4, 0xa9, 0xeb, 0x33, 0x9e, 0x5a, 0x31, 0xa9, 0x63, 0x8f, 0x48, 0x12, 0xc6, + 0xde, 0x09, 0x38, 0xa1, 0x81, 0xeb, 0x6b, 0xa7, 0xed, 0xc3, 0x68, 0x47, 0xf8, 0xa6, 0x48, 0xbc, + 0xbb, 0x32, 0xdd, 0x9a, 0x15, 0x69, 0x9a, 0x2b, 0xe3, 0x5f, 0x4d, 0xa6, 0x67, 0x47, 0x11, 0xe3, + 0x21, 0x56, 0x74, 0x0b, 0x4a, 0xb1, 0x23, 0x30, 0x73, 0x5e, 0x6a, 0x6f, 0x8d, 0xcb, 0x89, 0x49, + 0xf0, 0x80, 0xd8, 0xba, 0x0f, 0x17, 0x4f, 0x73, 0x30, 0x11, 0x30, 0xc7, 0xa4, 0x17, 0x07, 0xcc, + 0x31, 0xe9, 0x89, 0x9c, 0x75, 0xe2, 0xfa, 0x5d, 0x95, 0xcb, 0x4a, 0x58, 0x01, 0xeb, 0x99, 0x5b, + 0x86, 0x75, 0x17, 0xd0, 0xb8, 0x27, 0x9c, 0x49, 0xc2, 0x67, 0x70, 0x3e, 0xc5, 0xaa, 0x29, 0x22, + 0x2e, 0x27, 0x45, 0x8c, 0x07, 0xec, 0x40, 0xa4, 0xfd, 0xe7, 0x2c, 0x54, 0x92, 0xbe, 0x85, 0xd6, + 0xe0, 0xbc, 0x3a, 0x31, 0x26, 0x87, 0x89, 0x60, 0x54, 0xc2, 0xd3, 0xb6, 0x50, 0x1d, 0xde, 0xdd, + 0xe9, 0x68, 0x74, 0x32, 0x7e, 0x33, 0x32, 0xd9, 0xa4, 0xee, 0xa1, 0x10, 0xde, 0x53, 0xa2, 0x46, + 0x83, 0x3e, 0x2b, 0x6f, 0xe7, 0x93, 0xd3, 0x03, 0xc0, 0x49, 0xe5, 0x55, 0x2e, 0x96, 0x2e, 0x17, + 0xfd, 0x00, 0x0a, 0x6a, 0x83, 0xe9, 0xbc, 0xf2, 0xe1, 0xe9, 0x9f, 0x50, 0xc2, 0x62, 0x1e, 0xc1, + 0xae, 0xce, 0xc1, 0xcc, 0xb9, 0x33, 0xb0, 0x6b, 0x1e, 0xeb, 0x1e, 0x58, 0x93, 0x55, 0x3e, 0x8b, + 0x0b, 0xd8, 0x7f, 0x32, 0x60, 0x71, 0xec, 0x43, 0xe2, 0x49, 0x94, 0x8f, 0x82, 0x12, 0x21, 0xd7, + 0xa8, 0x01, 0x73, 0x2a, 0x49, 0x65, 0xa4, 0xc2, 0xce, 0x0c, 0x0a, 0x3b, 0x89, 0x0c, 0xa5, 0x98, + 0xad, 0x5b, 0x00, 0xaf, 0xe7, 0xac, 0xf6, 0x5f, 0x0c, 0x98, 0xd7, 0x09, 0x41, 0xd7, 0x0f, 0x2e, + 0x54, 0xfb, 0x31, 0xa6, 0x71, 0xba, 0x92, 0xb8, 0x31, 0x31, 0x97, 0x28, 0x32, 0x67, 0x94, 0x4f, + 0xe9, 0x38, 0x26, 0xce, 0xda, 0x8a, 0xfd, 0x6a, 0x84, 0xf4, 0x4c, 0x9a, 0x6f, 0xc1, 0xfc, 0x9e, + 0xac, 0x53, 0x27, 0x3f, 0x8b, 0x2b, 0x50, 0x16, 0xa5, 0x2c, 0xdb, 0xe3, 0x94, 0xb8, 0x1d, 0xb3, + 0x29, 0x73, 0x57, 0x12, 0x65, 0xff, 0xdb, 0x80, 0x85, 0x58, 0x8a, 0x3e, 0xff, 0xf7, 0xa0, 0x78, + 0x42, 0x28, 0x27, 0xcf, 0x09, 0xd3, 0xe7, 0x36, 0xc7, 0xcf, 0xfd, 0xb9, 0xa4, 0xc0, 0x7d, 0x4a, + 0xb4, 0x0e, 0x45, 0x55, 0x35, 0x93, 0xf8, 0x2a, 0x97, 0x26, 0x71, 0xe9, 0xef, 0xf5, 0xe9, 0x51, + 0x0d, 0x72, 0x7e, 0xd8, 0x66, 0x3a, 0xaa, 0xbe, 0x39, 0x89, 0xef, 0x41, 0xd8, 0xc6, 0x92, 0x10, + 0xdd, 0x86, 0xe2, 0x33, 0x97, 0x06, 0x5e, 0xd0, 0x8e, 0xe3, 0x64, 0x79, 0x12, 0xd3, 0x13, 0x45, + 0x87, 0xfb, 0x0c, 0xa2, 0xd0, 0xcb, 0xab, 0x3d, 0x74, 0x1f, 0xf2, 0x2d, 0xaf, 0x4d, 0x18, 0x57, + 0x46, 0xdb, 0xac, 0x8b, 0x17, 0xeb, 0xeb, 0x97, 0xcb, 0x57, 0x13, 0x4f, 0x52, 0x18, 0x91, 0x40, + 0xb4, 0x15, 0xae, 0x17, 0x10, 0x2a, 0xba, 0x84, 0xeb, 0x8a, 0xc5, 0x69, 0xc8, 0x1f, 0xac, 0x25, + 0x08, 0x59, 0x9e, 0x7a, 0x78, 0x64, 0x46, 0x79, 0x3d, 0x59, 0x4a, 0x82, 0x08, 0x94, 0xc0, 0xed, + 0x10, 0x5d, 0x90, 0xc8, 0xb5, 0xa8, 0x9b, 0x9a, 0x22, 0x12, 0x5a, 0xb2, 0xa2, 0x2c, 0x62, 0x0d, + 0xa1, 0x75, 0x28, 0x30, 0xee, 0x52, 0x91, 0x95, 0xe6, 0x66, 0x2c, 0xf8, 0x62, 0x06, 0x74, 0x07, + 0x4a, 0xcd, 0xb0, 0x13, 0xf9, 0x44, 0x70, 0xe7, 0x67, 0xe4, 0x1e, 0xb0, 0x08, 0xe7, 0x24, 0x94, + 0x86, 0x54, 0x96, 0x9a, 0x25, 0xac, 0x00, 0x74, 0x13, 0xe6, 0x23, 0x1a, 0xb6, 0x29, 0x61, 0xec, + 0x53, 0x1a, 0x76, 0x23, 0x5d, 0x2e, 0x2c, 0x8a, 0xf4, 0xbe, 0x9b, 0xdc, 0xc0, 0xc3, 0x74, 0xf6, + 0xbf, 0x32, 0x50, 0x49, 0xba, 0xc8, 0x58, 0x0d, 0x7e, 0x1f, 0xf2, 0xca, 0xe1, 0x54, 0x34, 0xbc, + 0x9e, 0x8d, 0x95, 0x84, 0x54, 0x1b, 0x9b, 0x50, 0x68, 0x76, 0xa9, 0x2c, 0xd0, 0x55, 0xd9, 0x1e, + 0x83, 0xe2, 0xa4, 0x3c, 0xe4, 0xae, 0x2f, 0x6d, 0x9c, 0xc5, 0x0a, 0x10, 0x35, 0x7b, 0xbf, 0x8f, + 0x3a, 0x5b, 0xcd, 0xde, 0x67, 0x4b, 0xde, 0x5f, 0xe1, 0x8d, 0xee, 0xaf, 0x78, 0xe6, 0xfb, 0xb3, + 0xff, 0x66, 0x40, 0xa9, 0x1f, 0x5b, 0x09, 0xeb, 0x1a, 0x6f, 0x6c, 0xdd, 0x21, 0xcb, 0x64, 0x5e, + 0xcf, 0x32, 0x17, 0x20, 0xcf, 0x54, 0xe2, 0x92, 0x1d, 0x25, 0xd6, 0x90, 0xc8, 0x73, 0x1d, 0xd6, + 0x96, 0x37, 0x54, 0xc1, 0x62, 0x69, 0xff, 0xc7, 0x80, 0xf9, 0xa1, 0x70, 0x7f, 0xab, 0x67, 0x79, + 0x17, 0xe6, 0x7c, 0x72, 0x42, 0x54, 0xcf, 0x9b, 0xc5, 0x0a, 0x10, 0x58, 0x76, 0x14, 0x52, 0x2e, + 0x95, 0xab, 0x60, 0x05, 0x08, 0x9d, 0x5b, 0x84, 0xbb, 0x9e, 0x2f, 0xf3, 0x52, 0x05, 0x6b, 0x48, + 0xe8, 0xdc, 0xa5, 0xbe, 0xae, 0xe2, 0xc5, 0x12, 0xd9, 0x90, 0xf3, 0x82, 0xc3, 0x50, 0xbb, 0x8d, + 0xac, 0x7d, 0x54, 0x35, 0xb8, 0x13, 0x1c, 0x86, 0x58, 0xee, 0xa1, 0x4b, 0x90, 0xa7, 0x6e, 0xd0, + 0x26, 0x71, 0x09, 0x5f, 0x12, 0x54, 0x58, 0x60, 0xb0, 0xde, 0xb0, 0x6d, 0xa8, 0xc8, 0xbe, 0xf9, + 0x21, 0x61, 0xa2, 0x4b, 0x13, 0x6e, 0xdd, 0x72, 0xb9, 0x2b, 0x8f, 0x5d, 0xc1, 0x72, 0x6d, 0x5f, + 0x03, 0xf4, 0xc0, 0x63, 0xfc, 0x89, 0x9c, 0x3a, 0xb0, 0x69, 0x4d, 0xf5, 0x1e, 0x9c, 0x1f, 0xa2, + 0xd6, 0xcf, 0xc2, 0xf7, 0x47, 0xda, 0xea, 0xcb, 0xe3, 0x19, 0x57, 0x0e, 0x37, 0x1c, 0xc5, 0x38, + 0xd2, 0x5d, 0xcf, 0x43, 0x59, 0x9e, 0x4b, 0x7d, 0xdb, 0xfe, 0xa3, 0x01, 0x15, 0x05, 0x6b, 0xe9, + 0x9f, 0xc1, 0xb9, 0x58, 0xd2, 0xe7, 0x84, 0xca, 0x8e, 0xc7, 0x90, 0x86, 0xf9, 0xf6, 0xa4, 0xcf, + 0x6c, 0x0e, 0x93, 0xe3, 0x51, 0x7e, 0xf1, 0xf8, 0x05, 0xdd, 0x8e, 0x6e, 0x98, 0x98, 0x49, 0x56, + 0x8c, 0xd5, 0x1c, 0x4e, 0xa2, 0xe4, 0xf3, 0x48, 0x9a, 0x61, 0xd0, 0x62, 0x3b, 0x2d, 0x9f, 0x98, + 0x87, 0x8a, 0x22, 0x81, 0xb2, 0xdf, 0x87, 0xf7, 0xf6, 0x8e, 0xba, 0xbc, 0x15, 0x3e, 0x0b, 0x76, + 0x0e, 0x05, 0x26, 0x3e, 0xc0, 0x97, 0x70, 0x61, 0x74, 0x43, 0x9f, 0xc4, 0x86, 0xca, 0x33, 0xcf, + 0xf7, 0xe3, 0x5d, 0x79, 0x8c, 0x22, 0x1e, 0xc2, 0x8d, 0xaa, 0x96, 0x19, 0x53, 0xcd, 0xae, 0xc2, + 0x02, 0x26, 0x8c, 0xd0, 0x7e, 0xa3, 0x62, 0x2f, 0xc2, 0xb9, 0x3e, 0x46, 0x7d, 0x4a, 0x6a, 0xa7, + 0x18, 0xee, 0x79, 0x8c, 0x87, 0xb4, 0x17, 0xd3, 0xfe, 0xcf, 0x80, 0x0b, 0xa3, 0x3b, 0x5a, 0xbd, + 0xfb, 0x50, 0x38, 0x52, 0x28, 0x7d, 0x8f, 0x6b, 0x29, 0x45, 0x4d, 0x2a, 0xab, 0x13, 0xc3, 0xb1, + 0x00, 0xeb, 0x37, 0x06, 0x14, 0x34, 0x12, 0x5d, 0x84, 0x12, 0x53, 0x6c, 0xfd, 0x8c, 0x3d, 0x40, + 0xa0, 0x8f, 0x61, 0x4e, 0xe6, 0xac, 0x19, 0x52, 0x81, 0x4a, 0x52, 0x8a, 0x1c, 0xd5, 0x21, 0x2b, + 0x3a, 0xdc, 0xec, 0x8c, 0x5c, 0x82, 0xd8, 0x26, 0x70, 0x5e, 0xfa, 0xc6, 0xb0, 0x4d, 0xd0, 0x12, + 0xc0, 0x46, 0x93, 0x7b, 0x27, 0xe4, 0x51, 0xe0, 0xf7, 0xf4, 0xad, 0x24, 0x30, 0x71, 0xf5, 0x94, + 0x19, 0x54, 0x4f, 0x17, 0xa1, 0xb4, 0xed, 0x52, 0xbf, 0xb7, 0xfd, 0xdc, 0xe3, 0x7a, 0xb6, 0x33, + 0x40, 0xd8, 0xbf, 0x32, 0x60, 0x31, 0xf9, 0x9d, 0xed, 0x13, 0xf1, 0x4e, 0xdc, 0x86, 0x1c, 0x8f, + 0x4b, 0xdc, 0x85, 0x34, 0xe7, 0x1d, 0x63, 0x11, 0x55, 0x30, 0x96, 0x4c, 0x89, 0x10, 0x53, 0x66, + 0xba, 0x7c, 0x3a, 0xfb, 0x48, 0x88, 0xfd, 0xb7, 0x08, 0x68, 0x7c, 0x3b, 0xa5, 0x2a, 0x4c, 0xce, + 0x0e, 0x32, 0x23, 0xb3, 0x83, 0xa7, 0xa3, 0xb3, 0x03, 0x55, 0x93, 0xdd, 0x9c, 0x45, 0x93, 0x19, + 0x26, 0x08, 0x43, 0x2d, 0x6e, 0xee, 0x0c, 0x2d, 0x2e, 0x5a, 0x8d, 0x4b, 0x0d, 0x55, 0xe4, 0xa0, + 0xd8, 0x17, 0x68, 0xd4, 0x74, 0x74, 0x41, 0xa9, 0xcb, 0x8f, 0x3b, 0x67, 0x1b, 0xa4, 0xe5, 0x46, + 0x87, 0x68, 0x9b, 0x50, 0xde, 0x8a, 0x5f, 0xc8, 0x33, 0x4c, 0xd1, 0x92, 0x4c, 0x68, 0x4d, 0x57, + 0xb4, 0xea, 0x4d, 0xbe, 0x38, 0x7e, 0xc4, 0x78, 0x62, 0x16, 0x52, 0x5d, 0xd2, 0x1e, 0xa6, 0x74, + 0x1d, 0x25, 0x69, 0xa0, 0xf5, 0x99, 0x6c, 0x3f, 0x63, 0xeb, 0x81, 0x3e, 0x81, 0x3c, 0x26, 0xac, + 0xeb, 0x73, 0x39, 0x9a, 0x2b, 0xd7, 0x2f, 0x4d, 0x90, 0xae, 0x88, 0x64, 0x8e, 0xd6, 0x0c, 0xe8, + 0xc7, 0x50, 0x50, 0x2b, 0x66, 0x96, 0x27, 0x4d, 0x94, 0x52, 0x34, 0xd3, 0x3c, 0xba, 0xd7, 0xd4, + 0x90, 0x08, 0xc7, 0x4f, 0x49, 0x40, 0xf4, 0xc8, 0xb8, 0xb2, 0x62, 0xac, 0xce, 0xe1, 0x04, 0x06, + 0xd5, 0x61, 0x8e, 0x53, 0xb7, 0x49, 0xcc, 0xf9, 0x19, 0x4c, 0xa8, 0x48, 0xc5, 0x8b, 0x16, 0x79, + 0x41, 0x40, 0x5a, 0xe6, 0x82, 0x2a, 0x91, 0x15, 0x84, 0xbe, 0x05, 0x0b, 0x41, 0xb7, 0x23, 0xfb, + 0xc8, 0xd6, 0x1e, 0x27, 0x11, 0x33, 0xcf, 0xc9, 0xef, 0x8d, 0x60, 0xd1, 0x65, 0x98, 0x0f, 0xba, + 0x9d, 0x7d, 0x51, 0xda, 0x29, 0xb2, 0xaa, 0x24, 0x1b, 0x46, 0xa2, 0x6b, 0xb0, 0x28, 0xf8, 0xe2, + 0xdb, 0x56, 0x94, 0x8b, 0x92, 0x72, 0x7c, 0xe3, 0x2d, 0x8c, 0x53, 0xde, 0x46, 0xb3, 0x68, 0x3d, + 0x85, 0x4a, 0xf2, 0x1e, 0x52, 0x78, 0x6f, 0x0e, 0x0f, 0x63, 0x66, 0xf0, 0x8b, 0x44, 0x2f, 0xfa, + 0x14, 0xbe, 0xf1, 0x38, 0x6a, 0xb9, 0x9c, 0xa4, 0x65, 0xde, 0xf1, 0x0c, 0x74, 0x01, 0xf2, 0xbb, + 0xea, 0xa2, 0xd4, 0x28, 0x5d, 0x43, 0x02, 0xdf, 0x20, 0xc2, 0x78, 0x3a, 0xdd, 0x6a, 0xc8, 0xbe, + 0x08, 0x56, 0x9a, 0x78, 0xfd, 0x0c, 0xfe, 0x3e, 0x03, 0x30, 0x70, 0x06, 0xf4, 0x01, 0x40, 0x87, + 0xb4, 0x3c, 0xf7, 0x67, 0x7c, 0x30, 0x6b, 0x28, 0x49, 0x8c, 0x1c, 0x38, 0x0c, 0x7a, 0xbe, 0xcc, + 0x1b, 0xf7, 0x7c, 0x08, 0x72, 0xcc, 0xfb, 0x8a, 0xe8, 0xfa, 0x54, 0xae, 0xd1, 0x23, 0x28, 0xbb, + 0x41, 0x10, 0x72, 0xe9, 0xc6, 0xf1, 0x1c, 0xe6, 0xfa, 0x69, 0xee, 0xeb, 0x6c, 0x0c, 0xe8, 0x55, + 0x94, 0x24, 0x25, 0x58, 0x77, 0xa0, 0x3a, 0x4a, 0x70, 0xa6, 0x39, 0xc1, 0x5f, 0x33, 0x70, 0x6e, + 0xe4, 0xea, 0xd0, 0x3d, 0xa8, 0x2a, 0x68, 0x64, 0x76, 0x36, 0x2d, 0xd0, 0xc6, 0xb8, 0xd0, 0x5d, + 0xa8, 0x6c, 0x70, 0x2e, 0x32, 0x21, 0xd7, 0xb5, 0x4c, 0x76, 0xaa, 0x94, 0x21, 0x0e, 0x74, 0x6f, + 0x90, 0x56, 0xb2, 0x93, 0x66, 0x40, 0x23, 0xfa, 0xa7, 0xe7, 0x14, 0xeb, 0xa7, 0x93, 0x9d, 0x3c, + 0xab, 0xac, 0x54, 0x1f, 0x76, 0xf2, 0x29, 0x59, 0x65, 0x60, 0xc3, 0xdf, 0x1a, 0x50, 0x8c, 0x83, + 0x30, 0x75, 0x8c, 0x75, 0x7b, 0x78, 0x8c, 0x75, 0x65, 0xf2, 0xa3, 0xf6, 0x36, 0xa7, 0x57, 0x57, + 0x7f, 0x08, 0xef, 0xa5, 0x16, 0x14, 0xa8, 0x0c, 0x85, 0xbd, 0xfd, 0x0d, 0xbc, 0xbf, 0xdd, 0xa8, + 0xbe, 0x83, 0x2a, 0x50, 0xdc, 0x7a, 0xf4, 0x70, 0xf7, 0xc1, 0xf6, 0xfe, 0x76, 0xd5, 0x10, 0x5b, + 0x8d, 0x6d, 0xb1, 0x6e, 0x54, 0x33, 0xf5, 0x3f, 0x14, 0xa1, 0xb0, 0xa5, 0xfe, 0x34, 0x45, 0xfb, + 0x50, 0xea, 0xff, 0x9b, 0x86, 0xec, 0x14, 0xd3, 0x8c, 0xfc, 0x2d, 0x67, 0x7d, 0x78, 0x2a, 0x8d, + 0x7e, 0x70, 0xee, 0xc1, 0x9c, 0xfc, 0x5f, 0x11, 0xa5, 0xcc, 0x83, 0x92, 0x7f, 0x38, 0x5a, 0xa7, + 0xff, 0x4f, 0xb7, 0x66, 0x08, 0x49, 0x72, 0xdc, 0x96, 0x26, 0x29, 0x39, 0xd3, 0xb7, 0x96, 0xa7, + 0xcc, 0xe9, 0xd0, 0x43, 0xc8, 0xeb, 0x09, 0x43, 0x1a, 0x69, 0x72, 0xa8, 0x66, 0xad, 0x4c, 0x26, + 0x50, 0xc2, 0xd6, 0x0c, 0xf4, 0xb0, 0xff, 0x37, 0x4d, 0x9a, 0x6a, 0xc9, 0xf6, 0xcc, 0x9a, 0xb2, + 0xbf, 0x6a, 0xac, 0x19, 0xe8, 0x0b, 0x28, 0x27, 0x1a, 0x30, 0x94, 0x52, 0x05, 0x8e, 0x77, 0x73, + 0xd6, 0x95, 0x29, 0x54, 0xfa, 0xe4, 0xdb, 0x90, 0x93, 0x09, 0x20, 0xc5, 0xd8, 0x89, 0xfe, 0x2c, + 0x4d, 0xcd, 0xa1, 0x76, 0xad, 0x09, 0x0b, 0xc3, 0xed, 0x0f, 0x4a, 0x29, 0x75, 0x53, 0x3b, 0x27, + 0x6b, 0x75, 0x3a, 0xa1, 0xfe, 0xc8, 0x4f, 0x64, 0x62, 0x10, 0x1d, 0x0f, 0x4a, 0xb9, 0x85, 0xe1, + 0xf6, 0xc8, 0xba, 0x74, 0x0a, 0x45, 0x42, 0xe9, 0xa1, 0xce, 0x26, 0x55, 0xe9, 0xb4, 0x86, 0x2a, + 0x55, 0xe9, 0xf4, 0xfe, 0xea, 0x40, 0xf5, 0xda, 0x24, 0x48, 0xc6, 0x25, 0xba, 0x32, 0xad, 0x52, + 0x9a, 0x18, 0x50, 0x63, 0xe1, 0xbd, 0x66, 0xa0, 0x10, 0xd0, 0xf8, 0x73, 0x88, 0xbe, 0x93, 0x12, + 0x3f, 0x93, 0xde, 0x64, 0xeb, 0xda, 0x6c, 0xc4, 0xea, 0x50, 0x9b, 0x95, 0x17, 0xaf, 0x96, 0x8c, + 0xbf, 0xbf, 0x5a, 0x32, 0xfe, 0xf9, 0x6a, 0xc9, 0x38, 0xc8, 0xcb, 0x1a, 0xf8, 0xbb, 0xff, 0x0f, + 0x00, 0x00, 0xff, 0xff, 0x39, 0xf6, 0x97, 0x35, 0x6e, 0x21, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/client/solve.go b/client/solve.go index 2cf3c628b..da72ecdc5 100644 --- a/client/solve.go +++ b/client/solve.go @@ -55,20 +55,13 @@ type SolveOpt struct { } type ExportEntry struct { -<<<<<<< HEAD Type string Attrs map[string]string - Output func(map[string]string) (io.WriteCloser, error) // for ExporterOCI, ExporterDocker and ExporterEarthly - OutputDir string // for ExporterLocal - OutputDirFunc func(map[string]string) (string, error) // for ExporterEarthly - OutputPullCallback pullping.PullCallback // for ExporterEarthly + Output filesync.FileOutputFunc // for ExporterOCI and ExporterDocker + OutputDir string // for ExporterLocal + OutputDirFunc func(map[string]string) (string, error) // for ExporterEarthly + OutputPullCallback pullping.PullCallback // for ExporterEarthly VerboseProgressCB fsutil.VerboseProgressCB -======= - Type string - Attrs map[string]string - Output filesync.FileOutputFunc // for ExporterOCI and ExporterDocker - OutputDir string // for ExporterLocal ->>>>>>> v0.13.2 } type CacheOptionsEntry struct { @@ -164,54 +157,10 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG contentStores[key2] = store } -<<<<<<< HEAD - var supportFile bool - var supportDir bool - switch ex.Type { - case ExporterLocal: - supportDir = true - case ExporterTar: - supportFile = true - case ExporterOCI, ExporterDocker: - supportDir = ex.OutputDir != "" - supportFile = ex.Output != nil - case ExporterEarthly: - supportFile = true - } - - if supportFile && supportDir { - return nil, errors.Errorf("both file and directory output is not supported by %s exporter", ex.Type) - } - if !supportFile && ex.Output != nil { - return nil, errors.Errorf("output file writer is not supported by %s exporter", ex.Type) - } - if !supportDir && ex.OutputDir != "" { - return nil, errors.Errorf("output directory is not supported by %s exporter", ex.Type) - } - - if supportFile { - if ex.Output == nil { - return nil, errors.Errorf("output file writer is required for %s exporter", ex.Type) - } - if ex.Type == ExporterEarthly { - if ex.OutputPullCallback != nil { - s.Allow(pullping.NewPullPing(ex.OutputPullCallback)) - } - s.Allow(filesync.NewFSSyncMultiTarget(ex.Output, ex.OutputDirFunc, ex.VerboseProgressCB)) - } else { - s.Allow(filesync.NewFSSyncTarget(ex.Output, ex.VerboseProgressCB)) - } - } - if supportDir { - if ex.OutputDir == "" { - return nil, errors.Errorf("output directory is required for %s exporter", ex.Type) - } -======= var syncTargets []filesync.FSSyncTarget for exID, ex := range opt.Exports { var supportFile bool var supportDir bool ->>>>>>> v0.13.2 switch ex.Type { case ExporterLocal: supportDir = true @@ -220,6 +169,8 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG case ExporterOCI, ExporterDocker: supportDir = ex.OutputDir != "" supportFile = ex.Output != nil + case ExporterEarthly: + supportFile = true } if supportFile && supportDir { return nil, errors.Errorf("both file and directory output is not supported by %s exporter", ex.Type) @@ -234,7 +185,14 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG if ex.Output == nil { return nil, errors.Errorf("output file writer is required for %s exporter", ex.Type) } - syncTargets = append(syncTargets, filesync.WithFSSync(exID, ex.Output)) + if ex.Type == ExporterEarthly { + if ex.OutputPullCallback != nil { + s.Allow(pullping.NewPullPing(ex.OutputPullCallback)) + } + s.Allow(filesync.NewFSSyncMultiTarget(ex.Output, ex.OutputDirFunc, ex.VerboseProgressCB)) + } else { + syncTargets = append(syncTargets, filesync.WithFSSync(exID, ex.Output)) + } } if supportDir { if ex.OutputDir == "" { @@ -254,13 +212,6 @@ func (c *Client) solve(ctx context.Context, def *llb.Definition, runGateway runG default: syncTargets = append(syncTargets, filesync.WithFSSyncDir(exID, ex.OutputDir)) } -<<<<<<< HEAD - contentStores["export"] = cs - storesToUpdate = append(storesToUpdate, ex.OutputDir) - default: - s.Allow(filesync.NewFSSyncTargetDir(ex.OutputDir, ex.VerboseProgressCB)) -======= ->>>>>>> v0.13.2 } } diff --git a/cmd/buildkitd/main.go b/cmd/buildkitd/main.go index c42e2caf3..a7b0fa9f9 100644 --- a/cmd/buildkitd/main.go +++ b/cmd/buildkitd/main.go @@ -276,23 +276,18 @@ func main() { return err } -<<<<<<< HEAD - unary := grpc_middleware.ChainUnaryServer(unaryInterceptor(ctx, tp), grpcerrors.UnaryServerInterceptor, - unaryTimeoutInterceptor(), // earthly-specific - ) - stream := grpc_middleware.ChainStreamServer(streamTracer, grpcerrors.StreamServerInterceptor, - streamTimeoutInterceptor(), // earthly-specific - ) -======= streamTracer := otelgrpc.StreamServerInterceptor( //nolint:staticcheck // TODO(thaJeztah): ignore SA1019 for deprecated options: see https://github.com/moby/buildkit/issues/4681 otelgrpc.WithTracerProvider(tp), otelgrpc.WithMeterProvider(mp), otelgrpc.WithPropagators(propagators), ) - unary := grpc_middleware.ChainUnaryServer(unaryInterceptor(ctx, tp, mp), grpcerrors.UnaryServerInterceptor) - stream := grpc_middleware.ChainStreamServer(streamTracer, grpcerrors.StreamServerInterceptor) ->>>>>>> v0.13.2 + unary := grpc_middleware.ChainUnaryServer(unaryInterceptor(ctx, tp, mp), grpcerrors.UnaryServerInterceptor, + unaryTimeoutInterceptor(), // earthly-specific + ) + stream := grpc_middleware.ChainStreamServer(streamTracer, grpcerrors.StreamServerInterceptor, + streamTimeoutInterceptor(), // earthly-specific + ) maxMsgSize := 67108864 // 64MB opts := []grpc.ServerOption{ @@ -337,10 +332,6 @@ func main() { os.RemoveAll(lockPath) }() -<<<<<<< HEAD - shutdownCh := make(chan struct{}) - controller, err := newController(c, &cfg, shutdownCh) -======= // listeners have to be initialized before the controller // https://github.com/moby/buildkit/issues/4618 listeners, err := newGRPCListeners(cfg.GRPC) @@ -348,8 +339,8 @@ func main() { return err } - controller, err := newController(c, &cfg) ->>>>>>> v0.13.2 + shutdownCh := make(chan struct{}) + controller, err := newController(c, &cfg, shutdownCh) if err != nil { return err } @@ -360,8 +351,8 @@ func main() { reflection.Register(server) // Earthly specific. - ctxReg, cancelReg := context.WithCancel(ctx) - defer cancelReg() + ctxReg, cancelReg := context.WithCancelCause(ctx) + defer cancelReg(errors.WithStack(context.Canceled)) lrPort, ok := os.LookupEnv("BUILDKIT_LOCAL_REGISTRY_LISTEN_PORT") lrAddr := fmt.Sprintf("0.0.0.0:%s", lrPort) if ok { @@ -371,7 +362,7 @@ func main() { for { select { case <-shutdownCh: - cancelReg() + cancelReg(errors.WithStack(context.Canceled)) case err := <-serveErr: if err != nil { bklog.G(ctx).Errorf("Registry serve error: %s\n", err.Error()) @@ -418,14 +409,10 @@ func main() { err = serverErr cancel(err) case <-ctx.Done(): -<<<<<<< HEAD - err = ctx.Err() + err = context.Cause(ctx) case <-shutdownCh: - cancelReg() + cancelReg(errors.WithStack(context.Canceled)) err = nil -======= - err = context.Cause(ctx) ->>>>>>> v0.13.2 } bklog.G(ctx).Infof("stopping server") diff --git a/exporter/earthlyoutputs/export.go b/exporter/earthlyoutputs/export.go index 3e9e233ed..f3a515197 100644 --- a/exporter/earthlyoutputs/export.go +++ b/exporter/earthlyoutputs/export.go @@ -78,9 +78,10 @@ func New(opt Opt) (exporter.Exporter, error) { return im, nil } -func (e *imageExporter) Resolve(ctx context.Context, opt map[string]string) (exporter.ExporterInstance, error) { +func (e *imageExporter) Resolve(ctx context.Context, id int, opt map[string]string) (exporter.ExporterInstance, error) { i := &imageExporterInstance{ imageExporter: e, + id: id, opts: containerimage.ImageCommitOpts{ RefCfg: cacheconfig.RefConfig{ Compression: compression.New(compression.Default), @@ -181,6 +182,7 @@ func (e *imageExporter) Resolve(ctx context.Context, opt map[string]string) (exp type imageExporterInstance struct { *imageExporter + id int opts containerimage.ImageCommitOpts push bool pushByDigest bool @@ -193,6 +195,10 @@ type imageExporterInstance struct { meta map[string][]byte } +func (e *imageExporterInstance) ID() int { + return e.id +} + func (e *imageExporterInstance) Name() string { return "[output] exporting outputs" } @@ -234,7 +240,7 @@ type imgData struct { opts containerimage.ImageCommitOpts } -func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source, sessionID string) (map[string]string, exporter.DescriptorReference, error) { +func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source, inlineCache exptypes.InlineCache, sessionID string) (map[string]string, exporter.DescriptorReference, error) { if src.Ref != nil { return nil, nil, errors.Errorf("export with src.Ref not supported") } @@ -262,11 +268,6 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source simpleMd[strings.TrimPrefix(mdK, mdPrefix)] = mdV } } - inlineCacheK := fmt.Sprintf("%s/%s", exptypes.ExporterInlineCache, k) - inlineCache, ok := src.Metadata[inlineCacheK] - if ok { - simpleMd[exptypes.ExporterInlineCache] = inlineCache - } opts := e.opts as, _, err := containerimage.ParseAnnotations(simpleMd) @@ -404,7 +405,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source resp := make(map[string]string) for imgName, img := range images { - desc, err := e.opt.ImageWriter.Commit(ctx, img.expSrc, sessionID, &img.opts) + desc, err := e.opt.ImageWriter.Commit(ctx, img.expSrc, sessionID, inlineCache, &img.opts) if err != nil { return nil, nil, err } @@ -430,8 +431,9 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source resp[descKey] = base64.StdEncoding.EncodeToString(dtDesc) } - timeoutCtx, cancel := context.WithTimeout(ctx, 5*time.Second) - defer cancel() + timeoutCtx, cancel := context.WithCancelCause(ctx) + timeoutCtx, _ = context.WithTimeoutCause(timeoutCtx, 5*time.Second, errors.WithStack(context.DeadlineExceeded)) + defer cancel(errors.WithStack(context.Canceled)) caller, err := e.opt.SessionManager.Get(timeoutCtx, sessionID, false) if err != nil { return nil, nil, err @@ -445,7 +447,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source for mdK, mdV := range img.expSrc.Metadata { md[safeGrpcMetaKey(mdK)] = string(mdV) } - img.tarWriter, err = filesync.CopyFileWriter(ctx, md, caller) + img.tarWriter, err = filesync.CopyFileWriter(ctx, md, e.id, caller) if err != nil { return nil, nil, err } diff --git a/exporter/earthlyoutputs/registry/eodriver/multimultiprovider.go b/exporter/earthlyoutputs/registry/eodriver/multimultiprovider.go index 45f36b3ec..2a8cd45a8 100644 --- a/exporter/earthlyoutputs/registry/eodriver/multimultiprovider.go +++ b/exporter/earthlyoutputs/registry/eodriver/multimultiprovider.go @@ -26,9 +26,9 @@ func NewMultiMultiProvider() *MultiMultiProvider { } type imgData struct { - base content.Provider + base content.InfoReaderProvider baseDgst digest.Digest - subs map[digest.Digest]content.Provider + subs map[digest.Digest]content.InfoReaderProvider } // MultiMultiProvider is a provider backed by a set of images, each of which is made out of @@ -74,7 +74,7 @@ func (mmp *MultiMultiProvider) getNoLock(ctx context.Context, imgName string) (* } // AddImgSub adds a new child content provider for an image. -func (mmp *MultiMultiProvider) AddImgSub(imgName string, dgst digest.Digest, p content.Provider) error { +func (mmp *MultiMultiProvider) AddImgSub(imgName string, dgst digest.Digest, p content.InfoReaderProvider) error { mmp.mu.Lock() defer mmp.mu.Unlock() imgData, ok := mmp.imgs[imgName] @@ -87,7 +87,7 @@ func (mmp *MultiMultiProvider) AddImgSub(imgName string, dgst digest.Digest, p c } // AddImg adds a new child image. The image is removed from the collection when the context is canceled. -func (mmp *MultiMultiProvider) AddImg(ctx context.Context, imgName string, base content.Provider, baseDigest digest.Digest) error { +func (mmp *MultiMultiProvider) AddImg(ctx context.Context, imgName string, base content.InfoReaderProvider, baseDigest digest.Digest) error { if baseDigest == "" { return errors.Errorf("baseDigest cant be empty") } @@ -123,7 +123,7 @@ func (mmp *MultiMultiProvider) AddImg(ctx context.Context, imgName string, base imgData := &imgData{ base: base, baseDgst: baseDigest, - subs: make(map[digest.Digest]content.Provider), + subs: make(map[digest.Digest]content.InfoReaderProvider), } mmp.imgs[imgName] = imgData imgData.subs[baseDigest] = base diff --git a/exporter/earthlyoutputs/registry/registry.go b/exporter/earthlyoutputs/registry/registry.go index db1f7b578..604cdada6 100644 --- a/exporter/earthlyoutputs/registry/registry.go +++ b/exporter/earthlyoutputs/registry/registry.go @@ -10,6 +10,7 @@ import ( "github.com/docker/distribution/registry/handlers" "github.com/docker/distribution/registry/listener" _ "github.com/moby/buildkit/exporter/earthlyoutputs/registry/eodriver" // register the driver + "github.com/pkg/errors" ) // Serve creates a registry service and starts listening for connections on listenAddr. @@ -35,10 +36,10 @@ storage: Handler: app, ReadHeaderTimeout: 30 * time.Second, } - ctx2, cancel := context.WithCancel(ctx) + ctx2, cancel := context.WithCancelCause(ctx) go func() { serveErr <- server.Serve(ln) - cancel() + cancel(errors.WithStack(context.Canceled)) }() go func() { <-ctx2.Done() diff --git a/frontend/frontend.go b/frontend/frontend.go index ef8fa7a12..07fdcd333 100644 --- a/frontend/frontend.go +++ b/frontend/frontend.go @@ -3,13 +3,9 @@ package frontend import ( "context" -<<<<<<< HEAD "github.com/moby/buildkit/cache" // earthly-specific this import breaks the mips64 frontend tests due to incorrect types on inode - "github.com/moby/buildkit/client/llb" -======= "github.com/moby/buildkit/client/llb/sourceresolver" "github.com/moby/buildkit/executor" ->>>>>>> v0.13.2 gw "github.com/moby/buildkit/frontend/gateway/client" "github.com/moby/buildkit/session" "github.com/moby/buildkit/solver" @@ -29,11 +25,7 @@ type Frontend interface { type FrontendLLBBridge interface { sourceresolver.MetaResolver Solve(ctx context.Context, req SolveRequest, sid string) (*Result, error) -<<<<<<< HEAD Export(ctx context.Context, refs map[string]cache.ImmutableRef, metadata map[string][]byte) error // earthly-specific - ResolveImageConfig(ctx context.Context, ref string, opt llb.ResolveImageConfigOpt) (string, digest.Digest, []byte, error) -======= ->>>>>>> v0.13.2 Warn(ctx context.Context, dgst digest.Digest, msg string, opts WarnOpts) error } diff --git a/frontend/gateway/client/client.go b/frontend/gateway/client/client.go index b7bdd7dab..ea80cb07b 100644 --- a/frontend/gateway/client/client.go +++ b/frontend/gateway/client/client.go @@ -29,12 +29,8 @@ func NewResult() *Result { type Client interface { sourceresolver.MetaResolver Solve(ctx context.Context, req SolveRequest) (*Result, error) -<<<<<<< HEAD Export(ctx context.Context, req ExportRequest) error // earthly-specific - ResolveImageConfig(ctx context.Context, ref string, opt llb.ResolveImageConfigOpt) (string, digest.Digest, []byte, error) -======= ResolveImageConfig(ctx context.Context, ref string, opt sourceresolver.Opt) (string, digest.Digest, []byte, error) ->>>>>>> v0.13.2 BuildOpts() BuildOpts Inputs(ctx context.Context) (map[string]llb.State, error) NewContainer(ctx context.Context, req NewContainerRequest) (Container, error) diff --git a/frontend/gateway/forwarder/forward.go b/frontend/gateway/forwarder/forward.go index 5e1d54624..5b8a33165 100644 --- a/frontend/gateway/forwarder/forward.go +++ b/frontend/gateway/forwarder/forward.go @@ -96,15 +96,14 @@ func (c *BridgeClient) Solve(ctx context.Context, req client.SolveRequest) (*cli return cRes, nil } -<<<<<<< HEAD // Export is only used by earthly via the grpcclient implementation func (c *BridgeClient) Export(ctx context.Context, req client.ExportRequest) error { return errors.Errorf("forwarder.bridgeClient does not support Export") -======= +} + func (c *BridgeClient) ResolveImageConfig(ctx context.Context, ref string, opt sourceresolver.Opt) (string, digest.Digest, []byte, error) { imr := sourceresolver.NewImageMetaResolver(c) return imr.ResolveImageConfig(ctx, ref, opt) ->>>>>>> v0.13.2 } func (c *BridgeClient) loadBuildOpts() client.BuildOpts { diff --git a/frontend/gateway/gateway.go b/frontend/gateway/gateway.go index 62b44bd13..bd0ca9c62 100644 --- a/frontend/gateway/gateway.go +++ b/frontend/gateway/gateway.go @@ -453,10 +453,9 @@ func newBridgeForwarder(ctx context.Context, llbBridge frontend.FrontendLLBBridg return lbf } -<<<<<<< HEAD -func serveLLBBridgeForwarder(ctx context.Context, llbBridge frontend.FrontendLLBBridge, workers worker.Infos, inputs map[string]*opspb.Definition, sid string, sm *session.Manager) (*llbBridgeForwarder, context.Context, error) { - ctx, cancel := context.WithCancel(ctx) - lbf := newBridgeForwarder(ctx, llbBridge, workers, inputs, sid, sm) +func serveLLBBridgeForwarder(ctx context.Context, llbBridge frontend.FrontendLLBBridge, exec executor.Executor, workers worker.Infos, inputs map[string]*opspb.Definition, sid string, sm *session.Manager) (*llbBridgeForwarder, context.Context, error) { + ctx, cancel := context.WithCancelCause(ctx) + lbf := newBridgeForwarder(ctx, llbBridge, exec, workers, inputs, sid, sm) maxMsgSize := 67108864 // 64MB server := grpc.NewServer( grpc.UnaryInterceptor(grpcerrors.UnaryServerInterceptor), @@ -465,12 +464,6 @@ func serveLLBBridgeForwarder(ctx context.Context, llbBridge frontend.FrontendLLB grpc.InitialWindowSize(65535*32), grpc.InitialConnWindowSize(65535*16), ) -======= -func serveLLBBridgeForwarder(ctx context.Context, llbBridge frontend.FrontendLLBBridge, exec executor.Executor, workers worker.Infos, inputs map[string]*opspb.Definition, sid string, sm *session.Manager) (*llbBridgeForwarder, context.Context, error) { - ctx, cancel := context.WithCancelCause(ctx) - lbf := newBridgeForwarder(ctx, llbBridge, exec, workers, inputs, sid, sm) - server := grpc.NewServer(grpc.UnaryInterceptor(grpcerrors.UnaryServerInterceptor), grpc.StreamInterceptor(grpcerrors.StreamServerInterceptor)) ->>>>>>> v0.13.2 grpc_health_v1.RegisterHealthServer(server, health.NewServer()) pb.RegisterLLBBridgeServer(server, lbf) diff --git a/frontend/gateway/grpcclient/client.go b/frontend/gateway/grpcclient/client.go index 6a6ac4a33..2e8ad19d4 100644 --- a/frontend/gateway/grpcclient/client.go +++ b/frontend/gateway/grpcclient/client.go @@ -12,11 +12,8 @@ import ( "syscall" "time" -<<<<<<< HEAD "github.com/containerd/containerd/defaults" -======= distreference "github.com/distribution/reference" ->>>>>>> v0.13.2 "github.com/gogo/googleapis/google/rpc" gogotypes "github.com/gogo/protobuf/types" "github.com/golang/protobuf/ptypes/any" @@ -486,7 +483,6 @@ func (c *grpcClient) Solve(ctx context.Context, creq client.SolveRequest) (res * return res, nil } -<<<<<<< HEAD // Export is earthly-specific func (c *grpcClient) Export(ctx context.Context, req client.ExportRequest) error { m := map[string]*pb.Ref{} @@ -507,8 +503,6 @@ func (c *grpcClient) Export(ctx context.Context, req client.ExportRequest) error return nil } -func (c *grpcClient) ResolveImageConfig(ctx context.Context, ref string, opt llb.ResolveImageConfigOpt) (string, digest.Digest, []byte, error) { -======= func (c *grpcClient) ResolveSourceMetadata(ctx context.Context, op *opspb.SourceOp, opt sourceresolver.Opt) (*sourceresolver.MetaResponse, error) { if c.caps.Supports(pb.CapSourceMetaResolver) != nil { var ref string @@ -537,8 +531,6 @@ func (c *grpcClient) ResolveSourceMetadata(ctx context.Context, op *opspb.Source }, }, nil } - ->>>>>>> v0.13.2 var p *opspb.Platform if platform := opt.Platform; platform != nil { p = &opspb.Platform{ diff --git a/frontend/gateway/pb/gateway.pb.go b/frontend/gateway/pb/gateway.pb.go index dfb62f7b1..85b4194f2 100644 --- a/frontend/gateway/pb/gateway.pb.go +++ b/frontend/gateway/pb/gateway.pb.go @@ -1607,7 +1607,7 @@ func (m *ExportRequest) Reset() { *m = ExportRequest{} } func (m *ExportRequest) String() string { return proto.CompactTextString(m) } func (*ExportRequest) ProtoMessage() {} func (*ExportRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{21} + return fileDescriptor_f1a937782ebbded5, []int{24} } func (m *ExportRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1660,7 +1660,7 @@ func (m *ExportResponse) Reset() { *m = ExportResponse{} } func (m *ExportResponse) String() string { return proto.CompactTextString(m) } func (*ExportResponse) ProtoMessage() {} func (*ExportResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{22} + return fileDescriptor_f1a937782ebbded5, []int{25} } func (m *ExportResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1701,11 +1701,7 @@ func (m *StatFileRequest) Reset() { *m = StatFileRequest{} } func (m *StatFileRequest) String() string { return proto.CompactTextString(m) } func (*StatFileRequest) ProtoMessage() {} func (*StatFileRequest) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{23} -======= - return fileDescriptor_f1a937782ebbded5, []int{24} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{26} } func (m *StatFileRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1759,11 +1755,7 @@ func (m *StatFileResponse) Reset() { *m = StatFileResponse{} } func (m *StatFileResponse) String() string { return proto.CompactTextString(m) } func (*StatFileResponse) ProtoMessage() {} func (*StatFileResponse) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{24} -======= - return fileDescriptor_f1a937782ebbded5, []int{25} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{27} } func (m *StatFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1810,11 +1802,7 @@ func (m *EvaluateRequest) Reset() { *m = EvaluateRequest{} } func (m *EvaluateRequest) String() string { return proto.CompactTextString(m) } func (*EvaluateRequest) ProtoMessage() {} func (*EvaluateRequest) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{25} -======= - return fileDescriptor_f1a937782ebbded5, []int{26} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{28} } func (m *EvaluateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1860,11 +1848,7 @@ func (m *EvaluateResponse) Reset() { *m = EvaluateResponse{} } func (m *EvaluateResponse) String() string { return proto.CompactTextString(m) } func (*EvaluateResponse) ProtoMessage() {} func (*EvaluateResponse) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{26} -======= - return fileDescriptor_f1a937782ebbded5, []int{27} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{29} } func (m *EvaluateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1903,11 +1887,7 @@ func (m *PingRequest) Reset() { *m = PingRequest{} } func (m *PingRequest) String() string { return proto.CompactTextString(m) } func (*PingRequest) ProtoMessage() {} func (*PingRequest) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{27} -======= - return fileDescriptor_f1a937782ebbded5, []int{28} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{30} } func (m *PingRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1949,11 +1929,7 @@ func (m *PongResponse) Reset() { *m = PongResponse{} } func (m *PongResponse) String() string { return proto.CompactTextString(m) } func (*PongResponse) ProtoMessage() {} func (*PongResponse) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{28} -======= - return fileDescriptor_f1a937782ebbded5, []int{29} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{31} } func (m *PongResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2020,11 +1996,7 @@ func (m *WarnRequest) Reset() { *m = WarnRequest{} } func (m *WarnRequest) String() string { return proto.CompactTextString(m) } func (*WarnRequest) ProtoMessage() {} func (*WarnRequest) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{29} -======= - return fileDescriptor_f1a937782ebbded5, []int{30} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{32} } func (m *WarnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2105,11 +2077,7 @@ func (m *WarnResponse) Reset() { *m = WarnResponse{} } func (m *WarnResponse) String() string { return proto.CompactTextString(m) } func (*WarnResponse) ProtoMessage() {} func (*WarnResponse) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{30} -======= - return fileDescriptor_f1a937782ebbded5, []int{31} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{33} } func (m *WarnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2156,11 +2124,7 @@ func (m *NewContainerRequest) Reset() { *m = NewContainerRequest{} } func (m *NewContainerRequest) String() string { return proto.CompactTextString(m) } func (*NewContainerRequest) ProtoMessage() {} func (*NewContainerRequest) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{31} -======= - return fileDescriptor_f1a937782ebbded5, []int{32} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{34} } func (m *NewContainerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2248,11 +2212,7 @@ func (m *NewContainerResponse) Reset() { *m = NewContainerResponse{} } func (m *NewContainerResponse) String() string { return proto.CompactTextString(m) } func (*NewContainerResponse) ProtoMessage() {} func (*NewContainerResponse) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{32} -======= - return fileDescriptor_f1a937782ebbded5, []int{33} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{35} } func (m *NewContainerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2292,11 +2252,7 @@ func (m *ReleaseContainerRequest) Reset() { *m = ReleaseContainerRequest func (m *ReleaseContainerRequest) String() string { return proto.CompactTextString(m) } func (*ReleaseContainerRequest) ProtoMessage() {} func (*ReleaseContainerRequest) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{33} -======= - return fileDescriptor_f1a937782ebbded5, []int{34} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{36} } func (m *ReleaseContainerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2342,11 +2298,7 @@ func (m *ReleaseContainerResponse) Reset() { *m = ReleaseContainerRespon func (m *ReleaseContainerResponse) String() string { return proto.CompactTextString(m) } func (*ReleaseContainerResponse) ProtoMessage() {} func (*ReleaseContainerResponse) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{34} -======= - return fileDescriptor_f1a937782ebbded5, []int{35} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{37} } func (m *ReleaseContainerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2396,11 +2348,7 @@ func (m *ExecMessage) Reset() { *m = ExecMessage{} } func (m *ExecMessage) String() string { return proto.CompactTextString(m) } func (*ExecMessage) ProtoMessage() {} func (*ExecMessage) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{35} -======= - return fileDescriptor_f1a937782ebbded5, []int{36} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{38} } func (m *ExecMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2557,11 +2505,7 @@ func (m *InitMessage) Reset() { *m = InitMessage{} } func (m *InitMessage) String() string { return proto.CompactTextString(m) } func (*InitMessage) ProtoMessage() {} func (*InitMessage) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{36} -======= - return fileDescriptor_f1a937782ebbded5, []int{37} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{39} } func (m *InitMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2644,11 +2588,7 @@ func (m *ExitMessage) Reset() { *m = ExitMessage{} } func (m *ExitMessage) String() string { return proto.CompactTextString(m) } func (*ExitMessage) ProtoMessage() {} func (*ExitMessage) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{37} -======= - return fileDescriptor_f1a937782ebbded5, []int{38} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{40} } func (m *ExitMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2701,11 +2641,7 @@ func (m *StartedMessage) Reset() { *m = StartedMessage{} } func (m *StartedMessage) String() string { return proto.CompactTextString(m) } func (*StartedMessage) ProtoMessage() {} func (*StartedMessage) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{38} -======= - return fileDescriptor_f1a937782ebbded5, []int{39} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{41} } func (m *StartedMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2744,11 +2680,7 @@ func (m *DoneMessage) Reset() { *m = DoneMessage{} } func (m *DoneMessage) String() string { return proto.CompactTextString(m) } func (*DoneMessage) ProtoMessage() {} func (*DoneMessage) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{39} -======= - return fileDescriptor_f1a937782ebbded5, []int{40} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{42} } func (m *DoneMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2790,11 +2722,7 @@ func (m *FdMessage) Reset() { *m = FdMessage{} } func (m *FdMessage) String() string { return proto.CompactTextString(m) } func (*FdMessage) ProtoMessage() {} func (*FdMessage) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{40} -======= - return fileDescriptor_f1a937782ebbded5, []int{41} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{43} } func (m *FdMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2856,11 +2784,7 @@ func (m *ResizeMessage) Reset() { *m = ResizeMessage{} } func (m *ResizeMessage) String() string { return proto.CompactTextString(m) } func (*ResizeMessage) ProtoMessage() {} func (*ResizeMessage) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{41} -======= - return fileDescriptor_f1a937782ebbded5, []int{42} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{44} } func (m *ResizeMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2916,11 +2840,7 @@ func (m *SignalMessage) Reset() { *m = SignalMessage{} } func (m *SignalMessage) String() string { return proto.CompactTextString(m) } func (*SignalMessage) ProtoMessage() {} func (*SignalMessage) Descriptor() ([]byte, []int) { -<<<<<<< HEAD - return fileDescriptor_f1a937782ebbded5, []int{42} -======= - return fileDescriptor_f1a937782ebbded5, []int{43} ->>>>>>> v0.13.2 + return fileDescriptor_f1a937782ebbded5, []int{45} } func (m *SignalMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3020,334 +2940,174 @@ func init() { func init() { proto.RegisterFile("gateway.proto", fileDescriptor_f1a937782ebbded5) } var fileDescriptor_f1a937782ebbded5 = []byte{ -<<<<<<< HEAD - // 2553 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xd7, 0x8a, 0x14, 0x45, 0x3e, 0x7e, 0x88, 0x9e, 0x38, 0x29, 0xb3, 0x08, 0x1c, 0x65, 0x1d, - 0x2b, 0xb2, 0xec, 0x90, 0xae, 0x6c, 0x57, 0xae, 0xdd, 0x3a, 0xb1, 0xbe, 0x20, 0xc5, 0x92, 0xcd, - 0x8e, 0x5c, 0xb8, 0x08, 0x12, 0xa0, 0x2b, 0xee, 0x90, 0xda, 0x7a, 0xb5, 0xbb, 0xdd, 0x1d, 0x4a, - 0x56, 0x72, 0xea, 0xa1, 0x40, 0x91, 0x63, 0x0f, 0x3d, 0x35, 0x97, 0x16, 0xe8, 0xa9, 0x87, 0xf6, - 0x1f, 0xc8, 0x39, 0x40, 0x7b, 0xe8, 0xad, 0x40, 0x0f, 0x41, 0xe1, 0x3f, 0xa2, 0x40, 0x6f, 0xc5, - 0x9b, 0x99, 0x25, 0x87, 0x1f, 0x5a, 0x91, 0xf5, 0x89, 0x33, 0x6f, 0xde, 0x7b, 0xf3, 0x3e, 0xe6, - 0xbd, 0xf9, 0xcd, 0x12, 0xca, 0x1d, 0x9b, 0xb3, 0x53, 0xfb, 0xac, 0x1e, 0x46, 0x01, 0x0f, 0xc8, - 0xdb, 0xc7, 0xc1, 0xe1, 0x59, 0xfd, 0xb0, 0xeb, 0x7a, 0xce, 0x0b, 0x97, 0xd7, 0x4f, 0xbe, 0x5f, - 0x6f, 0x47, 0x81, 0xcf, 0x99, 0xef, 0x98, 0xab, 0x1d, 0x97, 0x1f, 0x75, 0x0f, 0xeb, 0xad, 0xe0, - 0xb8, 0xd1, 0x09, 0x3a, 0x41, 0xa3, 0x13, 0x04, 0x1d, 0x8f, 0xd9, 0xa1, 0x1b, 0xab, 0x61, 0x23, - 0x0a, 0x5b, 0x8d, 0x98, 0xdb, 0xbc, 0x1b, 0x4b, 0x75, 0xe6, 0x87, 0xc3, 0x32, 0x82, 0x7c, 0xd8, - 0x6d, 0x8b, 0x99, 0x98, 0x88, 0x91, 0x62, 0x6f, 0x68, 0xec, 0x68, 0x48, 0x23, 0x31, 0xa4, 0x61, - 0x87, 0x6e, 0x83, 0x9f, 0x85, 0x2c, 0x6e, 0x9c, 0x06, 0xd1, 0x0b, 0x16, 0x29, 0x81, 0x9b, 0xe7, - 0x0a, 0xc4, 0x81, 0x77, 0xc2, 0xa2, 0x46, 0x78, 0xd8, 0x08, 0xc2, 0xc4, 0x9a, 0xbb, 0x29, 0xdc, - 0xdd, 0xa8, 0xc5, 0xc2, 0xc0, 0x73, 0x5b, 0x67, 0x28, 0x23, 0x47, 0x4a, 0xec, 0xf6, 0xb9, 0x62, - 0x5d, 0xee, 0x7a, 0x68, 0x5a, 0xcb, 0x0e, 0x63, 0x14, 0xc3, 0xdf, 0x31, 0x9e, 0xf3, 0xc0, 0x77, - 0x63, 0xee, 0xba, 0x1d, 0xb7, 0xd1, 0x8e, 0x85, 0x8c, 0x74, 0x05, 0x43, 0x25, 0xd9, 0xad, 0xbf, - 0x65, 0x21, 0x47, 0x59, 0xdc, 0xf5, 0x38, 0x59, 0x82, 0x72, 0xc4, 0xda, 0x9b, 0x2c, 0x8c, 0x58, - 0xcb, 0xe6, 0xcc, 0xa9, 0x19, 0x8b, 0xc6, 0x72, 0x61, 0x67, 0x86, 0x0e, 0x92, 0xc9, 0x4f, 0xa1, - 0x12, 0xb1, 0x76, 0xac, 0x31, 0xce, 0x2e, 0x1a, 0xcb, 0xc5, 0xd5, 0x1b, 0xf5, 0x73, 0x73, 0x58, - 0xa7, 0xac, 0xbd, 0x6f, 0x87, 0x7d, 0x91, 0x9d, 0x19, 0x3a, 0xa4, 0x84, 0xac, 0x42, 0x26, 0x62, - 0xed, 0x5a, 0x46, 0xe8, 0xba, 0x92, 0xae, 0x6b, 0x67, 0x86, 0x22, 0x33, 0x59, 0x83, 0x2c, 0x6a, - 0xa9, 0x65, 0x85, 0xd0, 0x7b, 0x17, 0x1a, 0xb0, 0x33, 0x43, 0x85, 0x00, 0x79, 0x0c, 0xf9, 0x63, - 0xc6, 0x6d, 0xc7, 0xe6, 0x76, 0x0d, 0x16, 0x33, 0xcb, 0xc5, 0xd5, 0x46, 0xaa, 0x30, 0x06, 0xa8, - 0xbe, 0xaf, 0x24, 0xb6, 0x7c, 0x1e, 0x9d, 0xd1, 0x9e, 0x02, 0xf2, 0x1c, 0x4a, 0x36, 0xe7, 0x0c, - 0xa3, 0xea, 0x06, 0x7e, 0x5c, 0x2b, 0x09, 0x85, 0xb7, 0x2f, 0x56, 0xf8, 0x48, 0x93, 0x92, 0x4a, - 0x07, 0x14, 0x99, 0x0f, 0xa0, 0x3c, 0xb0, 0x27, 0xa9, 0x42, 0xe6, 0x05, 0x3b, 0x93, 0x89, 0xa1, - 0x38, 0x24, 0x97, 0x61, 0xee, 0xc4, 0xf6, 0xba, 0x4c, 0xe4, 0xa0, 0x44, 0xe5, 0xe4, 0xfe, 0xec, - 0x3d, 0xc3, 0x3c, 0x82, 0x4b, 0x23, 0xfa, 0xc7, 0x28, 0xf8, 0xb1, 0xae, 0xa0, 0xb8, 0xfa, 0x41, - 0x8a, 0xd5, 0xba, 0x3a, 0x6d, 0xa7, 0xf5, 0x3c, 0xe4, 0x22, 0xe1, 0x90, 0xf5, 0x3b, 0x03, 0xaa, - 0xc3, 0xa9, 0x26, 0xbb, 0x2a, 0x49, 0x86, 0x08, 0xcb, 0xdd, 0x29, 0x4e, 0x09, 0x12, 0x54, 0x60, - 0x84, 0x0a, 0x73, 0x0d, 0x0a, 0x3d, 0xd2, 0x45, 0xc1, 0x28, 0x68, 0x26, 0x5a, 0x6b, 0x90, 0xa1, - 0xac, 0x4d, 0x2a, 0x30, 0xeb, 0xaa, 0x73, 0x4d, 0x67, 0x5d, 0x87, 0x2c, 0x42, 0xc6, 0x61, 0x6d, - 0xe5, 0x7a, 0xa5, 0x1e, 0x1e, 0xd6, 0x37, 0x59, 0xdb, 0xf5, 0x5d, 0x74, 0x91, 0xe2, 0x92, 0xf5, - 0x07, 0x03, 0xeb, 0x03, 0xcd, 0x22, 0x1f, 0x0d, 0xf8, 0x71, 0xf1, 0x69, 0x1f, 0xb1, 0xfe, 0x79, - 0xba, 0xf5, 0x77, 0x06, 0x33, 0x71, 0x41, 0x09, 0xe8, 0xde, 0xfd, 0x0c, 0x4a, 0x7a, 0x6e, 0xc8, - 0x0e, 0x14, 0xb5, 0x73, 0xa4, 0x0c, 0x5e, 0x9a, 0x2c, 0xb3, 0x54, 0x17, 0xb5, 0xfe, 0x94, 0x81, - 0xa2, 0xb6, 0x48, 0x1e, 0x42, 0xf6, 0x85, 0xeb, 0xcb, 0x10, 0x56, 0x56, 0x57, 0x26, 0x53, 0xf9, - 0xd8, 0xf5, 0x1d, 0x2a, 0xe4, 0x48, 0x53, 0xab, 0xbb, 0x59, 0x61, 0xd6, 0x9d, 0xc9, 0x74, 0x9c, - 0x5b, 0x7c, 0xb7, 0xa6, 0x68, 0x1b, 0xb2, 0x69, 0x10, 0xc8, 0x86, 0x36, 0x3f, 0x12, 0x4d, 0xa3, - 0x40, 0xc5, 0x98, 0xdc, 0x82, 0x37, 0x5c, 0xff, 0x59, 0xc0, 0x83, 0x66, 0xc4, 0x1c, 0x17, 0x0f, - 0xdf, 0xb3, 0xb3, 0x90, 0xd5, 0xe6, 0x04, 0xcb, 0xb8, 0x25, 0xd2, 0x84, 0x8a, 0x24, 0x1f, 0x74, - 0x0f, 0x7f, 0xc1, 0x5a, 0x3c, 0xae, 0xe5, 0x84, 0x3f, 0xcb, 0x29, 0x26, 0xec, 0xea, 0x02, 0x74, - 0x48, 0xfe, 0xb5, 0xaa, 0xdd, 0xfa, 0xab, 0x01, 0xe5, 0x01, 0xf5, 0xe4, 0xe3, 0x81, 0x54, 0xdd, - 0x9c, 0xd4, 0x2c, 0x2d, 0x59, 0x9f, 0x40, 0xce, 0x71, 0x3b, 0x2c, 0xe6, 0x22, 0x55, 0x85, 0xf5, - 0xd5, 0x6f, 0xbf, 0x7b, 0x77, 0xe6, 0x5f, 0xdf, 0xbd, 0xbb, 0xa2, 0x5d, 0x31, 0x41, 0xc8, 0xfc, - 0x56, 0xe0, 0x73, 0xdb, 0xf5, 0x59, 0x84, 0xf7, 0xf1, 0x87, 0x52, 0xa4, 0xbe, 0x29, 0x7e, 0xa8, - 0xd2, 0x80, 0x41, 0xf7, 0xed, 0x63, 0x26, 0xf2, 0x54, 0xa0, 0x62, 0x6c, 0x71, 0x28, 0x53, 0xc6, - 0xbb, 0x91, 0x4f, 0xd9, 0x2f, 0xbb, 0xc8, 0xf4, 0xc3, 0xa4, 0x91, 0x08, 0xa3, 0x2f, 0x6a, 0xe8, - 0xc8, 0x48, 0x95, 0x00, 0x59, 0x86, 0x39, 0x16, 0x45, 0x41, 0xa4, 0x8a, 0x87, 0xd4, 0x25, 0x32, - 0xa8, 0x47, 0x61, 0xab, 0x7e, 0x20, 0x90, 0x01, 0x95, 0x0c, 0x56, 0x15, 0x2a, 0xc9, 0xae, 0x71, - 0x18, 0xf8, 0x31, 0xb3, 0x16, 0x30, 0x74, 0x61, 0x97, 0xc7, 0xca, 0x0e, 0xeb, 0x1b, 0x03, 0x2a, - 0x09, 0x45, 0xf2, 0x90, 0xcf, 0xa0, 0xd8, 0x6f, 0x0d, 0x49, 0x0f, 0xb8, 0x9f, 0x1a, 0x54, 0x5d, - 0x5e, 0xeb, 0x2b, 0xaa, 0x25, 0xe8, 0xea, 0xcc, 0x27, 0x50, 0x1d, 0x66, 0x18, 0x93, 0xfd, 0xf7, - 0x07, 0x1b, 0xc4, 0x70, 0xbf, 0xd2, 0x4e, 0xc3, 0x37, 0xb3, 0xf0, 0x36, 0x65, 0x02, 0x8a, 0xec, - 0x1e, 0xdb, 0x1d, 0xb6, 0x11, 0xf8, 0x6d, 0xb7, 0x93, 0x84, 0xb9, 0x2a, 0x9a, 0x61, 0xa2, 0x19, - 0xfb, 0xe2, 0x32, 0xe4, 0x9b, 0x9e, 0xcd, 0xdb, 0x41, 0x74, 0xac, 0x94, 0x97, 0x50, 0x79, 0x42, - 0xa3, 0xbd, 0x55, 0xb2, 0x08, 0x45, 0xa5, 0x78, 0x3f, 0x70, 0x92, 0x74, 0xea, 0x24, 0x52, 0x83, - 0xf9, 0xbd, 0xa0, 0xf3, 0x04, 0x93, 0x2d, 0x2b, 0x2c, 0x99, 0x12, 0x0b, 0x4a, 0x8a, 0x31, 0xea, - 0x55, 0xd7, 0x1c, 0x1d, 0xa0, 0x91, 0x77, 0xa0, 0x70, 0xc0, 0xe2, 0xd8, 0x0d, 0xfc, 0xdd, 0xcd, - 0x5a, 0x4e, 0xc8, 0xf7, 0x09, 0xa8, 0xfb, 0x80, 0x07, 0x11, 0xdb, 0xdd, 0xac, 0xcd, 0x4b, 0xdd, - 0x6a, 0x4a, 0xf6, 0xa1, 0x72, 0x20, 0xb0, 0x54, 0x13, 0x11, 0x94, 0xcb, 0xe2, 0x5a, 0x5e, 0xa4, - 0xe8, 0xda, 0x68, 0x8a, 0x74, 0xcc, 0x55, 0x17, 0xec, 0x67, 0x74, 0x48, 0xd8, 0xfa, 0xad, 0x01, - 0xe6, 0xb8, 0x00, 0xaa, 0xd3, 0xf0, 0x09, 0xe4, 0xe4, 0xf9, 0x96, 0x41, 0xfc, 0xff, 0x2a, 0x43, - 0xfe, 0x92, 0xb7, 0x20, 0x27, 0xb5, 0xab, 0xa2, 0x56, 0xb3, 0x24, 0x4b, 0x99, 0x5e, 0x96, 0xac, - 0x5f, 0xe7, 0xa0, 0x74, 0x80, 0x26, 0x25, 0x89, 0xac, 0x03, 0xf4, 0xf3, 0xaf, 0x6a, 0x66, 0xf8, - 0x54, 0x68, 0x1c, 0xc4, 0x84, 0xfc, 0xb6, 0x3a, 0x9f, 0xea, 0x8a, 0xec, 0xcd, 0xc9, 0xa7, 0x50, - 0x4c, 0xc6, 0x4f, 0x43, 0x5e, 0xcb, 0x88, 0xe8, 0xdd, 0x4b, 0x39, 0xe0, 0xba, 0x25, 0x75, 0x4d, - 0x54, 0x1d, 0x6f, 0x8d, 0x42, 0x6e, 0xc2, 0x25, 0xdb, 0xf3, 0x82, 0x53, 0x55, 0xb3, 0xa2, 0xfa, - 0x44, 0xf6, 0xf3, 0x74, 0x74, 0x01, 0x7b, 0xb1, 0x46, 0x7c, 0x14, 0x45, 0xf6, 0x19, 0x06, 0x22, - 0x27, 0xf8, 0xc7, 0x2d, 0x61, 0x5b, 0xdc, 0x76, 0x7d, 0xdb, 0xab, 0x81, 0xe0, 0x91, 0x13, 0x3c, - 0x6e, 0x5b, 0x2f, 0xc3, 0x20, 0xe2, 0x2c, 0x7a, 0xc4, 0x79, 0x54, 0x2b, 0x8a, 0xf0, 0x0e, 0xd0, - 0x48, 0x13, 0x4a, 0x1b, 0x76, 0xeb, 0x88, 0xed, 0x1e, 0x23, 0x31, 0x81, 0x6e, 0x69, 0xcd, 0x52, - 0xb0, 0x3f, 0x0d, 0x75, 0xcc, 0xa6, 0x6b, 0x20, 0x2d, 0xa8, 0x24, 0xae, 0xcb, 0x16, 0x50, 0x2b, - 0x0b, 0x9d, 0x0f, 0xa6, 0x0d, 0xa5, 0x94, 0x96, 0x5b, 0x0c, 0xa9, 0xc4, 0x44, 0x6e, 0x61, 0xb5, - 0xdb, 0x9c, 0xd5, 0x2a, 0xc2, 0xe7, 0xde, 0x7c, 0x4c, 0x25, 0x2c, 0xbc, 0x46, 0x25, 0x98, 0x0f, - 0xa1, 0x3a, 0x9c, 0xdc, 0x69, 0x90, 0x97, 0xf9, 0x13, 0x78, 0x63, 0x8c, 0x47, 0xaf, 0xd5, 0xdd, - 0xfe, 0x62, 0xc0, 0xa5, 0x91, 0x34, 0xe0, 0x0d, 0x23, 0xba, 0x8a, 0x54, 0x29, 0xc6, 0x64, 0x1f, - 0xe6, 0x30, 0xcd, 0xb1, 0xc2, 0x1a, 0x6b, 0xd3, 0xe4, 0xb5, 0x2e, 0x24, 0x65, 0xfc, 0xa5, 0x16, - 0xf3, 0x1e, 0x40, 0x9f, 0x38, 0x15, 0xfe, 0xfc, 0x0c, 0xca, 0x2a, 0xc9, 0xaa, 0x83, 0x54, 0x25, - 0x6c, 0x51, 0xc2, 0x08, 0x4b, 0xfa, 0x97, 0x5f, 0x66, 0xca, 0xcb, 0xcf, 0xfa, 0x12, 0x16, 0x28, - 0xb3, 0x9d, 0x6d, 0xd7, 0x63, 0xe7, 0xf7, 0x78, 0x2c, 0x7e, 0xd7, 0x63, 0x4d, 0x84, 0x3e, 0x49, - 0xf1, 0xab, 0x39, 0xb9, 0x0f, 0x73, 0xd4, 0xf6, 0x3b, 0x4c, 0x6d, 0xfd, 0x7e, 0xca, 0xd6, 0x62, - 0x13, 0xe4, 0xa5, 0x52, 0xc4, 0x7a, 0x00, 0x85, 0x1e, 0x0d, 0x9b, 0xd9, 0xd3, 0x76, 0x3b, 0x66, - 0xb2, 0x31, 0x66, 0xa8, 0x9a, 0x21, 0x7d, 0x8f, 0xf9, 0x1d, 0xb5, 0x75, 0x86, 0xaa, 0x99, 0xb5, - 0x84, 0xef, 0x85, 0xc4, 0x72, 0x15, 0x1a, 0x02, 0xd9, 0x4d, 0xc4, 0x87, 0x86, 0xa8, 0x57, 0x31, - 0xb6, 0x1c, 0xbc, 0xb4, 0x6d, 0x67, 0xd3, 0x8d, 0xce, 0x77, 0xb0, 0x06, 0xf3, 0x9b, 0x6e, 0xa4, - 0xf9, 0x97, 0x4c, 0xc9, 0x12, 0x5e, 0xe7, 0x2d, 0xaf, 0xeb, 0xa0, 0xb7, 0x9c, 0x45, 0xbe, 0xea, - 0xaa, 0x43, 0x54, 0xeb, 0x23, 0x19, 0x47, 0xb1, 0x8b, 0x32, 0xe6, 0x26, 0xcc, 0x33, 0x9f, 0x47, - 0x58, 0x46, 0xf2, 0xce, 0x27, 0x75, 0xf9, 0x94, 0xae, 0x8b, 0xa7, 0xb4, 0xc0, 0x16, 0x34, 0x61, - 0xb1, 0xfe, 0x69, 0x40, 0x59, 0xf6, 0x97, 0xc4, 0xcc, 0xbb, 0xbd, 0x47, 0xc3, 0x64, 0x2f, 0x54, - 0xf5, 0x3e, 0xa5, 0x23, 0x38, 0xf9, 0x07, 0x29, 0xa2, 0x03, 0x5b, 0x9e, 0x87, 0x94, 0x5f, 0x0f, - 0x5f, 0x56, 0xa1, 0x92, 0xec, 0xa2, 0x50, 0xd3, 0x1a, 0x2c, 0xa0, 0xf3, 0xe9, 0x87, 0x8e, 0x40, - 0x56, 0x4b, 0x88, 0x18, 0x5b, 0xf7, 0xa1, 0xda, 0x17, 0x54, 0x61, 0x5e, 0x82, 0x2c, 0x02, 0x7d, - 0x15, 0xa6, 0x71, 0x31, 0x16, 0xeb, 0xd6, 0x55, 0x58, 0x48, 0x1a, 0xdd, 0xb9, 0x9b, 0x5a, 0x04, - 0xaa, 0x7d, 0x26, 0x65, 0x6d, 0x19, 0x8a, 0x4d, 0xd7, 0x4f, 0x20, 0x90, 0xf5, 0xca, 0x80, 0x52, - 0x33, 0xf0, 0xfb, 0x37, 0x7a, 0x13, 0x16, 0x92, 0x36, 0xf5, 0xa8, 0xb9, 0xbb, 0x61, 0x87, 0x49, - 0xbe, 0x17, 0x47, 0xe3, 0xae, 0x3e, 0xbc, 0xd4, 0x25, 0xe3, 0x7a, 0x16, 0x2f, 0x7f, 0x3a, 0x2c, - 0x4e, 0x3e, 0x86, 0xf9, 0xbd, 0xbd, 0x75, 0xa1, 0x69, 0x76, 0x2a, 0x4d, 0x89, 0x18, 0x79, 0x08, - 0xf3, 0xcf, 0xc5, 0x47, 0xa7, 0x58, 0x5d, 0xc7, 0x63, 0xea, 0x52, 0x46, 0x48, 0xb2, 0x51, 0xd6, - 0x0a, 0x22, 0x87, 0x26, 0x42, 0xd6, 0x7f, 0x0c, 0x28, 0x3e, 0xb7, 0xfb, 0xf0, 0xba, 0x8f, 0xe7, - 0x5f, 0x03, 0xb5, 0x28, 0x3c, 0x7f, 0x19, 0xe6, 0x3c, 0x76, 0xc2, 0x3c, 0x55, 0xcf, 0x72, 0x82, - 0xd4, 0xf8, 0x28, 0x88, 0x64, 0x0b, 0x2b, 0x51, 0x39, 0xc1, 0xe2, 0x77, 0x18, 0xb7, 0x5d, 0xaf, - 0x96, 0x5d, 0xcc, 0x20, 0xc2, 0x91, 0x33, 0xcc, 0x5c, 0x37, 0xf2, 0xd4, 0x23, 0x0b, 0x87, 0xc4, - 0x82, 0xac, 0xeb, 0xb7, 0x03, 0x71, 0xd7, 0xab, 0x2b, 0x40, 0x5e, 0x47, 0xbb, 0x7e, 0x3b, 0xa0, - 0x62, 0x8d, 0xbc, 0x07, 0xb9, 0x08, 0x7b, 0x4d, 0x5c, 0x9b, 0x17, 0x41, 0x29, 0x20, 0x97, 0xec, - 0x48, 0x6a, 0xc1, 0xaa, 0x40, 0x49, 0xfa, 0xad, 0x92, 0xff, 0xe7, 0x59, 0x78, 0xe3, 0x09, 0x3b, - 0xdd, 0x48, 0xfc, 0x4a, 0x02, 0xb2, 0x08, 0xc5, 0x1e, 0x6d, 0x77, 0x53, 0x1d, 0x21, 0x9d, 0x84, - 0x9b, 0xed, 0x07, 0x5d, 0x9f, 0x27, 0x39, 0x14, 0x9b, 0x09, 0x0a, 0x55, 0x0b, 0xe4, 0x1a, 0xcc, - 0x3f, 0x61, 0xfc, 0x34, 0x88, 0x5e, 0x08, 0xaf, 0x2b, 0xab, 0x45, 0xe4, 0x79, 0xc2, 0x38, 0xa2, - 0x61, 0x9a, 0xac, 0x21, 0xc4, 0x0e, 0x13, 0x88, 0x9d, 0x1d, 0x07, 0xb1, 0x93, 0x55, 0xb2, 0x06, - 0xc5, 0x56, 0xe0, 0xc7, 0x3c, 0xb2, 0x5d, 0xdc, 0x78, 0x4e, 0x30, 0xbf, 0x89, 0xcc, 0x32, 0xb1, - 0x1b, 0xfd, 0x45, 0xaa, 0x73, 0x92, 0x15, 0x00, 0xf6, 0x92, 0x47, 0xf6, 0x4e, 0x10, 0xf7, 0x9e, - 0xa3, 0x80, 0x72, 0x48, 0xd8, 0x6d, 0x52, 0x6d, 0x15, 0x6f, 0x83, 0xa3, 0x20, 0xe6, 0xe2, 0x4d, - 0x26, 0xa1, 0x74, 0x6f, 0x6e, 0xbd, 0x05, 0x97, 0x07, 0xa3, 0xa5, 0xc2, 0xf8, 0x00, 0xbe, 0x47, - 0x99, 0xc7, 0xec, 0x98, 0x4d, 0x1f, 0x49, 0xcb, 0x84, 0xda, 0xa8, 0xb0, 0x52, 0xfc, 0xdf, 0x0c, - 0x14, 0xb7, 0x5e, 0xb2, 0xd6, 0x3e, 0x8b, 0x63, 0xbb, 0x23, 0x1e, 0x01, 0xcd, 0x28, 0x68, 0xb1, - 0x38, 0xee, 0xe9, 0xea, 0x13, 0xc8, 0x8f, 0x20, 0xbb, 0xeb, 0xbb, 0x5c, 0xe1, 0x84, 0xa5, 0xd4, - 0x37, 0x98, 0xcb, 0x95, 0xce, 0x9d, 0x19, 0x2a, 0xa4, 0xc8, 0x7d, 0xc8, 0x62, 0xe7, 0x99, 0xe4, - 0xa6, 0x73, 0x34, 0x59, 0x94, 0x21, 0xeb, 0xe2, 0x5b, 0xa9, 0xfb, 0x05, 0x53, 0x19, 0x5c, 0x4e, - 0xbf, 0xa2, 0xdd, 0x2f, 0x58, 0x5f, 0x83, 0x92, 0x24, 0x5b, 0xf8, 0x84, 0xb1, 0x23, 0xce, 0x1c, - 0x95, 0xd9, 0xeb, 0x69, 0xc0, 0x50, 0x72, 0xf6, 0xb5, 0x24, 0xb2, 0x18, 0x84, 0xad, 0x97, 0x2e, - 0x57, 0x95, 0xb2, 0x94, 0x7a, 0x39, 0x0c, 0x04, 0x01, 0xa7, 0x28, 0xbd, 0x19, 0xf8, 0x32, 0xf3, - 0xe9, 0xd2, 0xc8, 0xa6, 0x49, 0xe3, 0x14, 0xc3, 0x70, 0xe0, 0x76, 0x10, 0x6f, 0xe7, 0x2f, 0x0c, - 0x83, 0x64, 0xd4, 0xc2, 0x20, 0x09, 0xeb, 0xf3, 0x30, 0x27, 0xe0, 0xa0, 0xf5, 0x77, 0x03, 0x8a, - 0x5a, 0x9e, 0x26, 0xa8, 0xc9, 0x77, 0x20, 0x8b, 0xf7, 0x98, 0xca, 0x7f, 0x5e, 0x54, 0x24, 0xe3, - 0x36, 0x15, 0x54, 0x6c, 0x2a, 0xdb, 0x8e, 0x6c, 0x98, 0x65, 0x8a, 0x43, 0xa4, 0x3c, 0xe3, 0x67, - 0x22, 0x65, 0x79, 0x8a, 0x43, 0x72, 0x13, 0xf2, 0x07, 0xac, 0xd5, 0x8d, 0x5c, 0x7e, 0x26, 0x92, - 0x50, 0x59, 0xad, 0x8a, 0x56, 0xa3, 0x68, 0xa2, 0x70, 0x7b, 0x1c, 0xe4, 0x06, 0x14, 0x62, 0xd6, - 0x8a, 0x18, 0x67, 0xfe, 0x89, 0xaa, 0xaa, 0xb2, 0x62, 0x8f, 0x18, 0xdf, 0xf2, 0x4f, 0x68, 0x7f, - 0xdd, 0x7a, 0x8c, 0x27, 0xb9, 0xef, 0x0d, 0x81, 0xec, 0x06, 0xbe, 0x93, 0xd1, 0x8d, 0x32, 0x15, - 0x63, 0xb2, 0x0c, 0x73, 0x5b, 0x17, 0x7d, 0xaa, 0xd8, 0x4a, 0x3e, 0x55, 0x0c, 0x9e, 0x00, 0xbc, - 0xc6, 0xb4, 0x8c, 0x58, 0x8f, 0xa0, 0xd0, 0x3b, 0xa5, 0xa4, 0x02, 0xb3, 0xdb, 0x8e, 0xda, 0x69, - 0x76, 0xdb, 0x41, 0xbf, 0xb7, 0x9e, 0x6e, 0x8b, 0x5d, 0xf2, 0x14, 0x87, 0x3d, 0x64, 0x95, 0xd1, - 0x90, 0xd5, 0x1a, 0x94, 0x07, 0x8e, 0x2a, 0x32, 0xd1, 0xe0, 0x34, 0x4e, 0x4c, 0xc6, 0xb1, 0x74, - 0xc3, 0x8b, 0x85, 0x2e, 0xe1, 0x86, 0x17, 0x5b, 0x57, 0xa1, 0x3c, 0x90, 0x5c, 0x64, 0x12, 0xaf, - 0x7e, 0x05, 0xc0, 0x71, 0xbc, 0xc2, 0x60, 0x61, 0xe8, 0x43, 0x20, 0xb9, 0x06, 0x39, 0xf9, 0xc1, - 0xa9, 0x3a, 0x63, 0xbe, 0xfd, 0xd5, 0xd7, 0x8b, 0x6f, 0x0e, 0x31, 0xc8, 0x45, 0x64, 0x5b, 0xef, - 0xfa, 0x8e, 0xc7, 0xaa, 0xc6, 0x58, 0x36, 0xb9, 0x68, 0x66, 0x7f, 0xf3, 0xc7, 0x2b, 0x33, 0x2b, - 0x36, 0x5c, 0x1a, 0xf9, 0x88, 0x45, 0xae, 0x42, 0xf6, 0x80, 0x79, 0xed, 0x64, 0x9b, 0x11, 0x06, - 0x5c, 0x24, 0xef, 0x41, 0x86, 0xda, 0xa7, 0x55, 0xc3, 0xac, 0x7d, 0xf5, 0xf5, 0xe2, 0xe5, 0xd1, - 0x2f, 0x61, 0xf6, 0xa9, 0xdc, 0x62, 0xf5, 0xf7, 0x45, 0x28, 0xec, 0xed, 0xad, 0xaf, 0x47, 0xae, - 0xd3, 0x61, 0xe4, 0x57, 0x06, 0x90, 0xd1, 0xef, 0x03, 0xe4, 0x4e, 0x7a, 0x43, 0x18, 0xff, 0x3d, - 0xc6, 0xbc, 0x3b, 0xa5, 0x94, 0x82, 0x2c, 0x9f, 0xc2, 0x9c, 0x78, 0x53, 0x90, 0x0f, 0x26, 0x7c, - 0x5a, 0x9a, 0xcb, 0x17, 0x33, 0x2a, 0xdd, 0x2d, 0xc8, 0x27, 0xb8, 0x9c, 0xac, 0xa4, 0x9a, 0x37, - 0xf0, 0xec, 0x30, 0x6f, 0x4c, 0xc4, 0xab, 0x36, 0xf9, 0x39, 0xcc, 0x2b, 0xb8, 0x4d, 0xae, 0x5f, - 0x20, 0xd7, 0x07, 0xfe, 0xe6, 0xca, 0x24, 0xac, 0x7d, 0x37, 0x12, 0xa8, 0x99, 0xea, 0xc6, 0x10, - 0x90, 0x4d, 0x75, 0x63, 0x04, 0xbb, 0xb6, 0xfa, 0x8f, 0xf1, 0xd4, 0x4d, 0x86, 0x80, 0x6b, 0xea, - 0x26, 0xc3, 0xf8, 0x95, 0x3c, 0x87, 0x2c, 0xe2, 0x57, 0x92, 0xd6, 0xab, 0x35, 0x80, 0x6b, 0xa6, - 0x9d, 0x89, 0x01, 0xe0, 0xfb, 0x39, 0xde, 0x69, 0xe2, 0xbb, 0x4b, 0xfa, 0x6d, 0xa6, 0x7d, 0xa7, - 0x35, 0xaf, 0x4f, 0xc0, 0xd9, 0x57, 0xaf, 0xbe, 0x59, 0x2c, 0x4f, 0xf0, 0xb1, 0xf4, 0x62, 0xf5, - 0x43, 0x9f, 0x65, 0x3f, 0x87, 0x9c, 0x7c, 0x96, 0xa4, 0xaa, 0x1f, 0x78, 0x1f, 0xa5, 0xaa, 0x1f, - 0x7c, 0xe3, 0x90, 0x00, 0x4a, 0x3a, 0x12, 0x22, 0xf5, 0x14, 0xd1, 0x31, 0x00, 0xd3, 0x6c, 0x4c, - 0xcc, 0xaf, 0x36, 0xfc, 0x12, 0xdf, 0xc3, 0x83, 0x28, 0x89, 0xac, 0xa6, 0x46, 0x7b, 0x2c, 0x1e, - 0x33, 0x6f, 0x4f, 0x25, 0xa3, 0x36, 0xb7, 0x25, 0x0a, 0x53, 0x48, 0x8b, 0xa4, 0x83, 0x8a, 0x1e, - 0x5a, 0x33, 0x27, 0xe4, 0x5b, 0x36, 0x6e, 0x19, 0x78, 0x8c, 0x11, 0x99, 0xa7, 0xea, 0xd6, 0x9e, - 0x2c, 0xa9, 0xc7, 0x58, 0x87, 0xf8, 0xeb, 0xa5, 0x6f, 0x5f, 0x5d, 0x31, 0xfe, 0xf1, 0xea, 0x8a, - 0xf1, 0xef, 0x57, 0x57, 0x8c, 0xc3, 0x9c, 0xf8, 0x73, 0xfb, 0xf6, 0xff, 0x02, 0x00, 0x00, 0xff, - 0xff, 0x9b, 0x69, 0x41, 0xae, 0x65, 0x20, 0x00, 0x00, -======= - // 2607 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5a, 0xcf, 0x6f, 0x1b, 0xc7, - 0xf5, 0xd7, 0x8a, 0x3f, 0x44, 0x3e, 0xfe, 0x10, 0x3d, 0x71, 0xf2, 0x65, 0x16, 0x81, 0xa3, 0x6c, - 0x62, 0x45, 0x96, 0x1d, 0xd2, 0x5f, 0xd9, 0x86, 0x5c, 0xbb, 0x75, 0x62, 0xfd, 0x82, 0x14, 0x4b, - 0x36, 0x3b, 0x72, 0xe1, 0x22, 0x48, 0x81, 0xae, 0xc8, 0x21, 0xb5, 0xf5, 0x6a, 0x77, 0xbb, 0x3b, - 0x94, 0xac, 0x04, 0x28, 0xda, 0x43, 0x81, 0x22, 0x87, 0x1e, 0x7a, 0xe8, 0x2d, 0x97, 0x16, 0xe8, - 0xa9, 0x87, 0xf6, 0x0f, 0x68, 0xce, 0x01, 0xda, 0x43, 0xcf, 0x3d, 0x04, 0x85, 0xff, 0x87, 0x16, - 0xe8, 0xad, 0x78, 0x33, 0xb3, 0xe4, 0xf0, 0x87, 0x96, 0x64, 0x5d, 0xf4, 0xc4, 0x9d, 0x37, 0xef, - 0xc7, 0xbc, 0xf7, 0xe6, 0xbd, 0xf9, 0xcc, 0x80, 0x50, 0xea, 0xd8, 0x9c, 0x9d, 0xd9, 0xe7, 0xb5, - 0x20, 0xf4, 0xb9, 0x4f, 0xde, 0x3c, 0xf1, 0x8f, 0xce, 0x6b, 0x47, 0x5d, 0xc7, 0x6d, 0x3d, 0x77, - 0x78, 0xed, 0xf4, 0xff, 0x6b, 0xed, 0xd0, 0xf7, 0x38, 0xf3, 0x5a, 0xe6, 0x5a, 0xc7, 0xe1, 0xc7, - 0xdd, 0xa3, 0x5a, 0xd3, 0x3f, 0xa9, 0x77, 0xfc, 0x8e, 0x5f, 0xef, 0xf8, 0x7e, 0xc7, 0x65, 0x76, - 0xe0, 0x44, 0xea, 0xb3, 0x1e, 0x06, 0xcd, 0x7a, 0xc4, 0x6d, 0xde, 0x8d, 0xa4, 0x3a, 0xf3, 0x83, - 0x61, 0x19, 0x41, 0x3e, 0xea, 0xb6, 0xc5, 0x48, 0x0c, 0xc4, 0x97, 0x62, 0xaf, 0x6b, 0xec, 0xb8, - 0x90, 0x7a, 0xbc, 0x90, 0xba, 0x1d, 0x38, 0x75, 0x7e, 0x1e, 0xb0, 0xa8, 0x7e, 0xe6, 0x87, 0xcf, - 0x59, 0xa8, 0x04, 0x6e, 0x5c, 0x28, 0x10, 0xf9, 0xee, 0x29, 0x0b, 0xeb, 0xc1, 0x51, 0xdd, 0x0f, - 0xe2, 0xd5, 0xdc, 0x49, 0xe0, 0xee, 0x86, 0x4d, 0x16, 0xf8, 0xae, 0xd3, 0x3c, 0x47, 0x19, 0xf9, - 0xa5, 0xc4, 0x6e, 0x5d, 0x28, 0xd6, 0xe5, 0x8e, 0x8b, 0x4b, 0x6b, 0xda, 0x41, 0x84, 0x62, 0xf8, - 0x3b, 0xc6, 0x73, 0xee, 0x7b, 0x4e, 0xc4, 0x1d, 0xa7, 0xe3, 0xd4, 0xdb, 0x91, 0x90, 0x91, 0xae, - 0x60, 0xa8, 0x24, 0xbb, 0xf5, 0xe7, 0x34, 0x64, 0x29, 0x8b, 0xba, 0x2e, 0x27, 0xcb, 0x50, 0x0a, - 0x59, 0x7b, 0x8b, 0x05, 0x21, 0x6b, 0xda, 0x9c, 0xb5, 0xaa, 0xc6, 0x92, 0xb1, 0x92, 0xdf, 0x9d, - 0xa3, 0x83, 0x64, 0xf2, 0x3d, 0x28, 0x87, 0xac, 0x1d, 0x69, 0x8c, 0xf3, 0x4b, 0xc6, 0x4a, 0x61, - 0xed, 0x7a, 0xed, 0xc2, 0x1c, 0xd6, 0x28, 0x6b, 0x1f, 0xd8, 0x41, 0x5f, 0x64, 0x77, 0x8e, 0x0e, - 0x29, 0x21, 0x6b, 0x90, 0x0a, 0x59, 0xbb, 0x9a, 0x12, 0xba, 0xae, 0x24, 0xeb, 0xda, 0x9d, 0xa3, - 0xc8, 0x4c, 0xd6, 0x21, 0x8d, 0x5a, 0xaa, 0x69, 0x21, 0xf4, 0xce, 0xc4, 0x05, 0xec, 0xce, 0x51, - 0x21, 0x40, 0x1e, 0x41, 0xee, 0x84, 0x71, 0xbb, 0x65, 0x73, 0xbb, 0x0a, 0x4b, 0xa9, 0x95, 0xc2, - 0x5a, 0x3d, 0x51, 0x18, 0x03, 0x54, 0x3b, 0x50, 0x12, 0xdb, 0x1e, 0x0f, 0xcf, 0x69, 0x4f, 0x01, - 0x79, 0x06, 0x45, 0x9b, 0x73, 0x86, 0x51, 0x75, 0x7c, 0x2f, 0xaa, 0x16, 0x85, 0xc2, 0x5b, 0x93, - 0x15, 0x3e, 0xd4, 0xa4, 0xa4, 0xd2, 0x01, 0x45, 0xe6, 0x7d, 0x28, 0x0d, 0xd8, 0x24, 0x15, 0x48, - 0x3d, 0x67, 0xe7, 0x32, 0x31, 0x14, 0x3f, 0xc9, 0x65, 0xc8, 0x9c, 0xda, 0x6e, 0x97, 0x89, 0x1c, - 0x14, 0xa9, 0x1c, 0xdc, 0x9b, 0xbf, 0x6b, 0x98, 0xc7, 0x70, 0x69, 0x44, 0xff, 0x18, 0x05, 0xdf, - 0xd1, 0x15, 0x14, 0xd6, 0xde, 0x4f, 0x58, 0xb5, 0xae, 0x4e, 0xb3, 0xb4, 0x91, 0x83, 0x6c, 0x28, - 0x1c, 0xb2, 0x7e, 0x6d, 0x40, 0x65, 0x38, 0xd5, 0x64, 0x4f, 0x25, 0xc9, 0x10, 0x61, 0xb9, 0x33, - 0xc3, 0x2e, 0x41, 0x82, 0x0a, 0x8c, 0x50, 0x61, 0xae, 0x43, 0xbe, 0x47, 0x9a, 0x14, 0x8c, 0xbc, - 0xb6, 0x44, 0x6b, 0x1d, 0x52, 0x94, 0xb5, 0x49, 0x19, 0xe6, 0x1d, 0xb5, 0xaf, 0xe9, 0xbc, 0xd3, - 0x22, 0x4b, 0x90, 0x6a, 0xb1, 0xb6, 0x72, 0xbd, 0x5c, 0x0b, 0x8e, 0x6a, 0x5b, 0xac, 0xed, 0x78, - 0x0e, 0xba, 0x48, 0x71, 0xca, 0xfa, 0x8d, 0x81, 0xf5, 0x81, 0xcb, 0x22, 0x1f, 0x0e, 0xf8, 0x31, - 0x79, 0xb7, 0x8f, 0xac, 0xfe, 0x59, 0xf2, 0xea, 0x6f, 0x0f, 0x66, 0x62, 0x42, 0x09, 0xe8, 0xde, - 0x7d, 0x1f, 0x8a, 0x7a, 0x6e, 0xc8, 0x2e, 0x14, 0xb4, 0x7d, 0xa4, 0x16, 0xbc, 0x3c, 0x5d, 0x66, - 0xa9, 0x2e, 0x6a, 0xfd, 0x2e, 0x05, 0x05, 0x6d, 0x92, 0x3c, 0x80, 0xf4, 0x73, 0xc7, 0x93, 0x21, - 0x2c, 0xaf, 0xad, 0x4e, 0xa7, 0xf2, 0x91, 0xe3, 0xb5, 0xa8, 0x90, 0x23, 0x0d, 0xad, 0xee, 0xe6, - 0xc5, 0xb2, 0x6e, 0x4f, 0xa7, 0xe3, 0xc2, 0xe2, 0xbb, 0x39, 0x43, 0xdb, 0x90, 0x4d, 0x83, 0x40, - 0x3a, 0xb0, 0xf9, 0xb1, 0x68, 0x1a, 0x79, 0x2a, 0xbe, 0xc9, 0x4d, 0x78, 0xcd, 0xf1, 0x9e, 0xfa, - 0xdc, 0x6f, 0x84, 0xac, 0xe5, 0xe0, 0xe6, 0x7b, 0x7a, 0x1e, 0xb0, 0x6a, 0x46, 0xb0, 0x8c, 0x9b, - 0x22, 0x0d, 0x28, 0x4b, 0xf2, 0x61, 0xf7, 0xe8, 0x47, 0xac, 0xc9, 0xa3, 0x6a, 0x56, 0xf8, 0xb3, - 0x92, 0xb0, 0x84, 0x3d, 0x5d, 0x80, 0x0e, 0xc9, 0xbf, 0x52, 0xb5, 0x5b, 0x7f, 0x34, 0xa0, 0x34, - 0xa0, 0x9e, 0x7c, 0x34, 0x90, 0xaa, 0x1b, 0xd3, 0x2e, 0x4b, 0x4b, 0xd6, 0xc7, 0x90, 0x6d, 0x39, - 0x1d, 0x16, 0x71, 0x91, 0xaa, 0xfc, 0xc6, 0xda, 0xd7, 0xdf, 0xbc, 0x3d, 0xf7, 0xb7, 0x6f, 0xde, - 0x5e, 0xd5, 0x8e, 0x18, 0x3f, 0x60, 0x5e, 0xd3, 0xf7, 0xb8, 0xed, 0x78, 0x2c, 0xc4, 0xf3, 0xf8, - 0x03, 0x29, 0x52, 0xdb, 0x12, 0x3f, 0x54, 0x69, 0xc0, 0xa0, 0x7b, 0xf6, 0x09, 0x13, 0x79, 0xca, - 0x53, 0xf1, 0x6d, 0x71, 0x28, 0x51, 0xc6, 0xbb, 0xa1, 0x47, 0xd9, 0x8f, 0xbb, 0xc8, 0xf4, 0xad, - 0xb8, 0x91, 0x88, 0x45, 0x4f, 0x6a, 0xe8, 0xc8, 0x48, 0x95, 0x00, 0x59, 0x81, 0x0c, 0x0b, 0x43, - 0x3f, 0x54, 0xc5, 0x43, 0x6a, 0x12, 0x19, 0xd4, 0xc2, 0xa0, 0x59, 0x3b, 0x14, 0xc8, 0x80, 0x4a, - 0x06, 0xab, 0x02, 0xe5, 0xd8, 0x6a, 0x14, 0xf8, 0x5e, 0xc4, 0xac, 0x45, 0x0c, 0x5d, 0xd0, 0xe5, - 0x91, 0x5a, 0x87, 0xf5, 0x95, 0x01, 0xe5, 0x98, 0x22, 0x79, 0xc8, 0xa7, 0x50, 0xe8, 0xb7, 0x86, - 0xb8, 0x07, 0xdc, 0x4b, 0x0c, 0xaa, 0x2e, 0xaf, 0xf5, 0x15, 0xd5, 0x12, 0x74, 0x75, 0xe6, 0x63, - 0xa8, 0x0c, 0x33, 0x8c, 0xc9, 0xfe, 0x7b, 0x83, 0x0d, 0x62, 0xb8, 0x5f, 0x69, 0xbb, 0xe1, 0xab, - 0x79, 0x78, 0x93, 0x32, 0x01, 0x45, 0xf6, 0x4e, 0xec, 0x0e, 0xdb, 0xf4, 0xbd, 0xb6, 0xd3, 0x89, - 0xc3, 0x5c, 0x11, 0xcd, 0x30, 0xd6, 0x8c, 0x7d, 0x71, 0x05, 0x72, 0x0d, 0xd7, 0xe6, 0x6d, 0x3f, - 0x3c, 0x51, 0xca, 0x8b, 0xa8, 0x3c, 0xa6, 0xd1, 0xde, 0x2c, 0x59, 0x82, 0x82, 0x52, 0x7c, 0xe0, - 0xb7, 0xe2, 0x74, 0xea, 0x24, 0x52, 0x85, 0x85, 0x7d, 0xbf, 0xf3, 0x18, 0x93, 0x2d, 0x2b, 0x2c, - 0x1e, 0x12, 0x0b, 0x8a, 0x8a, 0x31, 0xec, 0x55, 0x57, 0x86, 0x0e, 0xd0, 0xc8, 0x5b, 0x90, 0x3f, - 0x64, 0x51, 0xe4, 0xf8, 0xde, 0xde, 0x56, 0x35, 0x2b, 0xe4, 0xfb, 0x04, 0xd4, 0x7d, 0xc8, 0xfd, - 0x90, 0xed, 0x6d, 0x55, 0x17, 0xa4, 0x6e, 0x35, 0x24, 0x07, 0x50, 0x3e, 0x14, 0x58, 0xaa, 0x81, - 0x08, 0xca, 0x61, 0x51, 0x35, 0x27, 0x52, 0x74, 0x75, 0x34, 0x45, 0x3a, 0xe6, 0xaa, 0x09, 0xf6, - 0x73, 0x3a, 0x24, 0x6c, 0xfd, 0xca, 0x00, 0x73, 0x5c, 0x00, 0xd5, 0x6e, 0xf8, 0x18, 0xb2, 0x72, - 0x7f, 0xcb, 0x20, 0xfe, 0x67, 0x95, 0x21, 0x7f, 0xc9, 0x1b, 0x90, 0x95, 0xda, 0x55, 0x51, 0xab, - 0x51, 0x9c, 0xa5, 0x54, 0x2f, 0x4b, 0xd6, 0x3f, 0x0c, 0xa8, 0xaa, 0x45, 0xc9, 0xe5, 0x62, 0xbb, - 0x88, 0x93, 0xfa, 0x1e, 0x64, 0x25, 0x51, 0xd5, 0x8e, 0x48, 0xa0, 0xa4, 0x3c, 0x09, 0xa8, 0x9a, - 0x9b, 0x21, 0xd1, 0x5a, 0x1a, 0x53, 0x83, 0x69, 0x1c, 0xda, 0x02, 0xe9, 0xd1, 0x2d, 0xf0, 0x5f, - 0x4e, 0xc6, 0x2f, 0x8d, 0xde, 0x6e, 0xd6, 0xfd, 0x56, 0xb9, 0x98, 0xce, 0xf1, 0x47, 0x90, 0x11, - 0x89, 0x54, 0x5e, 0x27, 0xa3, 0x10, 0xcd, 0x94, 0x10, 0x8a, 0x6d, 0x51, 0xa9, 0xc3, 0xfa, 0x69, - 0x7f, 0x77, 0x8c, 0xe1, 0xfa, 0x5f, 0xec, 0x0e, 0xeb, 0xe7, 0x59, 0x28, 0x1e, 0xe2, 0x02, 0xe2, - 0xfc, 0xd7, 0x00, 0xfa, 0xbd, 0x40, 0x85, 0x62, 0xb8, 0x43, 0x68, 0x1c, 0xc4, 0x84, 0xdc, 0x8e, - 0xf2, 0x58, 0xc1, 0xa5, 0xde, 0x98, 0x7c, 0x02, 0x85, 0xf8, 0xfb, 0x49, 0xc0, 0xab, 0x29, 0x91, - 0xbc, 0xbb, 0x09, 0x21, 0xd3, 0x57, 0x52, 0xd3, 0x44, 0x55, 0xab, 0xd3, 0x28, 0xe4, 0x06, 0x5c, - 0xb2, 0x5d, 0xd7, 0x3f, 0x53, 0xfd, 0x5b, 0x74, 0x62, 0xd1, 0x09, 0x72, 0x74, 0x74, 0x02, 0xcf, - 0x65, 0x8d, 0xf8, 0x30, 0x0c, 0xed, 0x73, 0x2c, 0x8a, 0xac, 0xe0, 0x1f, 0x37, 0x85, 0x47, 0xe4, - 0x8e, 0xe3, 0xd9, 0x6e, 0x15, 0x04, 0x8f, 0x1c, 0x60, 0xeb, 0xd9, 0x7e, 0x11, 0xf8, 0x21, 0x67, - 0xe1, 0x43, 0xce, 0xc3, 0x6a, 0x41, 0x04, 0x73, 0x80, 0x46, 0x1a, 0x50, 0xdc, 0xb4, 0x9b, 0xc7, - 0x6c, 0xef, 0x04, 0x89, 0x31, 0x8c, 0x4f, 0x3a, 0x38, 0x05, 0xfb, 0x93, 0x40, 0xc7, 0xef, 0xba, - 0x06, 0xd2, 0x84, 0x72, 0xec, 0xba, 0x3c, 0x0e, 0xaa, 0x25, 0xa1, 0xf3, 0xfe, 0xac, 0xa1, 0x94, - 0xd2, 0xd2, 0xc4, 0x90, 0x4a, 0x4c, 0xe4, 0x36, 0x76, 0x7e, 0x9b, 0xb3, 0x6a, 0x59, 0xf8, 0xdc, - 0x1b, 0x8f, 0x29, 0xc4, 0xc5, 0x57, 0x28, 0x44, 0xf3, 0x01, 0x54, 0x86, 0x93, 0x3b, 0x0b, 0x0a, - 0x37, 0xbf, 0x0b, 0xaf, 0x8d, 0xf1, 0xe8, 0x95, 0x4e, 0xba, 0x3f, 0x18, 0x70, 0x69, 0x24, 0x0d, - 0x88, 0x36, 0xc4, 0x09, 0x23, 0x55, 0x8a, 0x6f, 0x72, 0x00, 0x19, 0x4c, 0x73, 0xa4, 0x70, 0xe7, - 0xfa, 0x2c, 0x79, 0xad, 0x09, 0x49, 0x19, 0x7f, 0xa9, 0xc5, 0xbc, 0x0b, 0xd0, 0x27, 0xce, 0x74, - 0x17, 0xf9, 0x14, 0x4a, 0x2a, 0xc9, 0xaa, 0x5f, 0x54, 0x24, 0x84, 0x55, 0xc2, 0x08, 0x51, 0xfb, - 0x40, 0x28, 0x35, 0x23, 0x10, 0xb2, 0x3e, 0x87, 0x45, 0xca, 0xec, 0xd6, 0x8e, 0xe3, 0xb2, 0x8b, - 0xcf, 0x7b, 0x2c, 0x7e, 0xc7, 0x65, 0x0d, 0x84, 0xc1, 0x71, 0xf1, 0xab, 0x31, 0xb9, 0x07, 0x19, - 0x6a, 0x7b, 0x1d, 0xa6, 0x4c, 0xbf, 0x97, 0x60, 0x5a, 0x18, 0x41, 0x5e, 0x2a, 0x45, 0xac, 0xfb, - 0x90, 0xef, 0xd1, 0xb0, 0x75, 0x3d, 0x69, 0xb7, 0x23, 0x26, 0xdb, 0x60, 0x8a, 0xaa, 0x11, 0xd2, - 0xf7, 0x99, 0xd7, 0x51, 0xa6, 0x53, 0x54, 0x8d, 0xac, 0x65, 0xbc, 0x3b, 0xc6, 0x2b, 0x57, 0xa1, - 0x21, 0x90, 0xde, 0xc2, 0xbb, 0x82, 0x21, 0xea, 0x55, 0x7c, 0x5b, 0x2d, 0x04, 0x70, 0x76, 0x6b, - 0xcb, 0x09, 0x2f, 0x76, 0xb0, 0x0a, 0x0b, 0x5b, 0x4e, 0xa8, 0xf9, 0x17, 0x0f, 0xc9, 0x32, 0x42, - 0xbb, 0xa6, 0xdb, 0x6d, 0xa1, 0xb7, 0x9c, 0x85, 0x9e, 0x3a, 0xde, 0x86, 0xa8, 0xd6, 0x87, 0x32, - 0x8e, 0xc2, 0x8a, 0x5a, 0xcc, 0x0d, 0x58, 0x60, 0x1e, 0x0f, 0xb1, 0x8c, 0x24, 0xfe, 0x23, 0x35, - 0xf9, 0xac, 0x52, 0x13, 0xcf, 0x2a, 0x02, 0x67, 0xd2, 0x98, 0xc5, 0x5a, 0x87, 0x45, 0x24, 0x24, - 0x27, 0x82, 0x40, 0x5a, 0x5b, 0xa4, 0xf8, 0xb6, 0xee, 0x41, 0xa5, 0x2f, 0xa8, 0x4c, 0x2f, 0x43, - 0x1a, 0x2f, 0x42, 0xaa, 0xaf, 0x8f, 0xb3, 0x2b, 0xe6, 0xad, 0x77, 0x61, 0x31, 0x2e, 0xfe, 0x0b, - 0x8d, 0x5a, 0x04, 0x2a, 0x7d, 0x26, 0x85, 0x81, 0x4b, 0x50, 0x68, 0x38, 0x5e, 0x0c, 0x11, 0xad, - 0x97, 0x06, 0x14, 0x1b, 0xbe, 0xd7, 0x47, 0x3c, 0x0d, 0x58, 0x8c, 0x4b, 0xf7, 0x61, 0x63, 0x6f, - 0xd3, 0x0e, 0xe2, 0x18, 0x2c, 0x8d, 0xee, 0x0f, 0xf5, 0x30, 0x55, 0x93, 0x8c, 0x1b, 0x69, 0x3c, - 0xfe, 0xe8, 0xb0, 0x38, 0xf9, 0x08, 0x16, 0xf6, 0xf7, 0x37, 0x84, 0xa6, 0xf9, 0x99, 0x34, 0xc5, - 0x62, 0xe4, 0x01, 0x2c, 0x3c, 0x13, 0x8f, 0x72, 0x91, 0x3a, 0xa2, 0xc6, 0xec, 0x55, 0x19, 0x21, - 0xc9, 0x46, 0x59, 0xd3, 0x0f, 0x5b, 0x34, 0x16, 0xb2, 0xfe, 0x69, 0x40, 0xe1, 0x99, 0xdd, 0xbf, - 0x7e, 0xf4, 0xef, 0x3b, 0xaf, 0x70, 0x6e, 0xab, 0xfb, 0xce, 0x65, 0xc8, 0xb8, 0xec, 0x94, 0xb9, - 0x6a, 0x8f, 0xcb, 0x01, 0x52, 0xa3, 0x63, 0x3f, 0x94, 0x65, 0x5d, 0xa4, 0x72, 0x80, 0x05, 0xd1, - 0x62, 0xdc, 0x76, 0xdc, 0x6a, 0x7a, 0x29, 0x85, 0x67, 0xbc, 0x1c, 0x61, 0xe6, 0xba, 0xa1, 0xab, - 0x2e, 0xa1, 0xf8, 0x49, 0x2c, 0x48, 0x3b, 0x5e, 0xdb, 0x17, 0xe7, 0x9f, 0x6a, 0x8b, 0x0a, 0x80, - 0x78, 0x6d, 0x9f, 0x8a, 0x39, 0xf2, 0x0e, 0x64, 0x43, 0xac, 0xbf, 0xa8, 0xba, 0x20, 0x82, 0x92, - 0x47, 0x2e, 0x59, 0xa5, 0x6a, 0xc2, 0x2a, 0x43, 0x51, 0xfa, 0xad, 0x92, 0xff, 0xfb, 0x79, 0x78, - 0xed, 0x31, 0x3b, 0xdb, 0x8c, 0xfd, 0x8a, 0x03, 0xb2, 0x04, 0x85, 0x1e, 0x6d, 0x6f, 0x4b, 0x6d, - 0x21, 0x9d, 0x84, 0xc6, 0x0e, 0xfc, 0xae, 0xc7, 0xe3, 0x1c, 0x0a, 0x63, 0x82, 0x42, 0xd5, 0x04, - 0xb9, 0x0a, 0x0b, 0x8f, 0x19, 0x3f, 0xf3, 0xc3, 0xe7, 0xc2, 0xeb, 0xf2, 0x5a, 0x01, 0x79, 0x1e, - 0x33, 0x8e, 0x50, 0x91, 0xc6, 0x73, 0x88, 0x4c, 0x83, 0x18, 0x99, 0xa6, 0xc7, 0x21, 0xd3, 0x78, - 0x96, 0xac, 0x43, 0xa1, 0xe9, 0x7b, 0x11, 0x0f, 0x6d, 0x07, 0x0d, 0x67, 0x04, 0xf3, 0xeb, 0xc8, - 0x2c, 0x13, 0xbb, 0xd9, 0x9f, 0xa4, 0x3a, 0x27, 0x59, 0x05, 0x60, 0x2f, 0x78, 0x68, 0xef, 0xfa, - 0x51, 0xef, 0xba, 0x0e, 0x28, 0x87, 0x84, 0xbd, 0x06, 0xd5, 0x66, 0xb1, 0x43, 0x1e, 0xfb, 0x11, - 0x17, 0x77, 0x56, 0x79, 0xd5, 0xe8, 0x8d, 0xad, 0x37, 0xe0, 0xf2, 0x60, 0xb4, 0x54, 0x18, 0xef, - 0xc3, 0xff, 0x51, 0xe6, 0x32, 0x3b, 0x62, 0xb3, 0x47, 0xd2, 0x32, 0x11, 0xdb, 0x0f, 0x0b, 0x2b, - 0xc5, 0xff, 0x4a, 0x41, 0x61, 0xfb, 0x05, 0x6b, 0x1e, 0xb0, 0x28, 0xb2, 0x3b, 0xe2, 0x92, 0xd4, - 0x08, 0xfd, 0x26, 0x8b, 0xa2, 0x9e, 0xae, 0x3e, 0x81, 0x7c, 0x1b, 0xd2, 0x7b, 0x9e, 0xc3, 0xd5, - 0xd9, 0xb9, 0x9c, 0x78, 0x47, 0x75, 0xb8, 0xd2, 0xb9, 0x3b, 0x47, 0x85, 0x14, 0xb9, 0x07, 0x69, - 0xec, 0x3c, 0xd3, 0x74, 0xff, 0x96, 0x26, 0x8b, 0x32, 0x64, 0x43, 0xbc, 0x25, 0x3b, 0x9f, 0x31, - 0x95, 0xc1, 0x95, 0xe4, 0x63, 0xcb, 0xf9, 0x8c, 0xf5, 0x35, 0x28, 0x49, 0xb2, 0x8d, 0x57, 0x3c, - 0x3b, 0xe4, 0xac, 0xa5, 0x32, 0x7b, 0x2d, 0x09, 0x2c, 0x49, 0xce, 0xbe, 0x96, 0x58, 0x16, 0x83, - 0xb0, 0xfd, 0xc2, 0xe1, 0xaa, 0x52, 0x92, 0x82, 0x80, 0x6c, 0x9a, 0x23, 0x38, 0x44, 0xe9, 0x2d, - 0xdf, 0x93, 0x99, 0x4f, 0x96, 0x46, 0x36, 0x4d, 0x1a, 0x87, 0x18, 0x86, 0x43, 0xa7, 0x83, 0x18, - 0x34, 0x37, 0x31, 0x0c, 0x92, 0x51, 0x0b, 0x83, 0x24, 0x6c, 0x2c, 0x40, 0x46, 0x40, 0x24, 0xeb, - 0x2f, 0x06, 0x14, 0xb4, 0x3c, 0x4d, 0x51, 0x93, 0x6f, 0x41, 0x1a, 0x2f, 0x48, 0x2a, 0xff, 0x39, - 0x51, 0x91, 0x78, 0x61, 0x12, 0x54, 0x6c, 0x2a, 0x3b, 0x2d, 0xd9, 0x30, 0x4b, 0x14, 0x3f, 0x91, - 0xf2, 0x94, 0x9f, 0x8b, 0x94, 0xe5, 0x28, 0x7e, 0x92, 0x1b, 0x90, 0x3b, 0x64, 0xcd, 0x6e, 0xe8, - 0xf0, 0x73, 0x91, 0x84, 0xf2, 0x5a, 0x45, 0xb4, 0x1a, 0x45, 0x13, 0x85, 0xdb, 0xe3, 0x20, 0xd7, - 0x21, 0x1f, 0xb1, 0x66, 0xc8, 0x38, 0xf3, 0x4e, 0x55, 0x55, 0x95, 0x14, 0x7b, 0xc8, 0xf8, 0xb6, - 0x77, 0x4a, 0xfb, 0xf3, 0xd6, 0x23, 0xdc, 0xc9, 0x7d, 0x6f, 0x08, 0xa4, 0x37, 0xf1, 0x12, 0x89, - 0x6e, 0x94, 0xa8, 0xf8, 0x26, 0x2b, 0x90, 0xd9, 0x9e, 0xf4, 0x94, 0xb3, 0x1d, 0x3f, 0xe5, 0x0c, - 0xee, 0x00, 0x3c, 0xc6, 0xb4, 0x8c, 0x58, 0x0f, 0x21, 0xdf, 0xdb, 0xa5, 0xa4, 0x0c, 0xf3, 0x3b, - 0x2d, 0x65, 0x69, 0x7e, 0xa7, 0x85, 0x7e, 0x6f, 0x3f, 0xd9, 0x11, 0x56, 0x72, 0x14, 0x3f, 0x7b, - 0x68, 0x23, 0xa5, 0xa1, 0x8d, 0x75, 0x28, 0x0d, 0x6c, 0x55, 0x64, 0xa2, 0xfe, 0x59, 0x14, 0x2f, - 0x19, 0xbf, 0xa5, 0x1b, 0x6e, 0x24, 0x74, 0x09, 0x37, 0xdc, 0xc8, 0x7a, 0x17, 0x4a, 0x03, 0xc9, - 0x45, 0x26, 0x71, 0x9d, 0x56, 0xa0, 0x14, 0xbf, 0x57, 0x19, 0x2c, 0x0e, 0x3d, 0x94, 0x92, 0xab, - 0x90, 0x95, 0x0f, 0x72, 0x95, 0x39, 0xf3, 0xcd, 0x2f, 0xbe, 0x5c, 0x7a, 0x7d, 0x88, 0x41, 0x4e, - 0x22, 0xdb, 0x46, 0xd7, 0x6b, 0xb9, 0xac, 0x62, 0x8c, 0x65, 0x93, 0x93, 0x66, 0xfa, 0x17, 0xbf, - 0xbd, 0x32, 0xb7, 0x6a, 0xc3, 0xa5, 0x91, 0x47, 0x3e, 0xf2, 0x2e, 0xa4, 0x0f, 0x99, 0xdb, 0x8e, - 0xcd, 0x8c, 0x30, 0xe0, 0x24, 0x79, 0x07, 0x52, 0xd4, 0x3e, 0xab, 0x18, 0x66, 0xf5, 0x8b, 0x2f, - 0x97, 0x2e, 0x8f, 0xbe, 0x14, 0xda, 0x67, 0xd2, 0xc4, 0xda, 0x9f, 0x0a, 0x90, 0xdf, 0xdf, 0xdf, - 0xd8, 0x08, 0x9d, 0x56, 0x87, 0x91, 0x9f, 0x19, 0x40, 0x46, 0xdf, 0x4f, 0xc8, 0xed, 0xc9, 0xd7, - 0xee, 0xd1, 0xf7, 0x2a, 0xf3, 0xce, 0x8c, 0x52, 0x0a, 0xb2, 0xfc, 0x04, 0x2e, 0x8d, 0xbc, 0x1a, - 0x90, 0x5b, 0xd3, 0x5e, 0xfc, 0xb5, 0xb7, 0x15, 0xf3, 0xf6, 0x6c, 0x42, 0xca, 0xfe, 0x27, 0x90, - 0x11, 0x38, 0x9f, 0xbc, 0x3f, 0xe5, 0x75, 0xcf, 0x5c, 0x99, 0xcc, 0xa8, 0x74, 0x37, 0x21, 0x17, - 0x63, 0x65, 0xb2, 0x9a, 0xb8, 0xba, 0x81, 0xab, 0x80, 0x79, 0x7d, 0x2a, 0x5e, 0x65, 0xe4, 0x87, - 0xb0, 0xa0, 0x20, 0x30, 0xb9, 0x36, 0x41, 0xae, 0x0f, 0xc6, 0xcd, 0xd5, 0x69, 0x58, 0xfb, 0x6e, - 0xc4, 0x50, 0x37, 0xd1, 0x8d, 0x21, 0x20, 0x9d, 0xe8, 0xc6, 0x08, 0x76, 0x6e, 0xf6, 0x2f, 0xc8, - 0x89, 0x46, 0x86, 0x80, 0x73, 0xa2, 0x91, 0x61, 0xfc, 0x4c, 0x9e, 0x41, 0x1a, 0xf1, 0x33, 0x49, - 0x3a, 0x2b, 0x34, 0x80, 0x6d, 0x26, 0xed, 0x89, 0x01, 0xe0, 0xfd, 0x03, 0x3c, 0x53, 0xc5, 0x5b, - 0x48, 0xf2, 0x69, 0xaa, 0xbd, 0xa3, 0x9b, 0xd7, 0xa6, 0xe0, 0xec, 0xab, 0x57, 0xef, 0x08, 0x2b, - 0x53, 0x3c, 0x66, 0x4f, 0x56, 0x3f, 0xf4, 0x6c, 0xee, 0x43, 0x51, 0x87, 0x4a, 0xa4, 0x96, 0x20, - 0x3a, 0x06, 0x81, 0x9a, 0xf5, 0xa9, 0xf9, 0x95, 0xc1, 0xcf, 0xf1, 0x12, 0x39, 0x08, 0xa3, 0xc8, - 0x5a, 0x62, 0x38, 0xc6, 0x02, 0x36, 0xf3, 0xd6, 0x4c, 0x32, 0xca, 0xb8, 0x2d, 0x61, 0x9a, 0x82, - 0x62, 0x24, 0x19, 0x75, 0xf4, 0xe0, 0x9c, 0x39, 0x25, 0xdf, 0x8a, 0x71, 0xd3, 0xc0, 0x7d, 0x86, - 0xd0, 0x3d, 0x51, 0xb7, 0x76, 0xa7, 0x49, 0xdc, 0x67, 0xfa, 0x1d, 0x60, 0xa3, 0xf8, 0xf5, 0xcb, - 0x2b, 0xc6, 0x5f, 0x5f, 0x5e, 0x31, 0xfe, 0xfe, 0xf2, 0x8a, 0x71, 0x94, 0x15, 0xff, 0x0e, 0xb8, - 0xf5, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x24, 0x02, 0x46, 0xa6, 0x21, 0x00, 0x00, ->>>>>>> v0.13.2 + // 2665 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5a, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xd7, 0x8a, 0x1f, 0x22, 0x1f, 0x3f, 0x44, 0x4f, 0x9c, 0x94, 0x59, 0x04, 0x8e, 0xb2, 0x49, + 0x14, 0x45, 0x76, 0x48, 0x57, 0xb6, 0x2b, 0xd7, 0x6e, 0x9d, 0x58, 0x5f, 0x90, 0x62, 0xc9, 0x66, + 0x47, 0x2e, 0x5c, 0x04, 0x09, 0xd0, 0x15, 0x39, 0xa4, 0xb6, 0x5e, 0xed, 0x6e, 0x77, 0x87, 0x92, + 0x95, 0x00, 0x45, 0x7b, 0x28, 0x50, 0xe4, 0xd0, 0x43, 0x0f, 0x3d, 0x35, 0x97, 0x16, 0xe8, 0xa9, + 0x87, 0xf6, 0x1f, 0xc8, 0x39, 0x40, 0x7b, 0xe8, 0xad, 0x40, 0x0f, 0x41, 0xe1, 0xff, 0xa1, 0x05, + 0x7a, 0x2b, 0xde, 0xcc, 0x2c, 0x39, 0xfc, 0xd0, 0x92, 0xac, 0x8b, 0x9e, 0xb8, 0xf3, 0xe6, 0x7d, + 0xcc, 0x7b, 0x6f, 0xe6, 0xcd, 0xef, 0x8d, 0x04, 0xa5, 0x8e, 0xcd, 0xd9, 0x99, 0x7d, 0x5e, 0x0b, + 0x42, 0x9f, 0xfb, 0xe4, 0xd5, 0x13, 0xff, 0xe8, 0xbc, 0x76, 0xd4, 0x75, 0xdc, 0xd6, 0x53, 0x87, + 0xd7, 0x4e, 0xbf, 0x59, 0x6b, 0x87, 0xbe, 0xc7, 0x99, 0xd7, 0x32, 0xd7, 0x3a, 0x0e, 0x3f, 0xee, + 0x1e, 0xd5, 0x9a, 0xfe, 0x49, 0xbd, 0xe3, 0x77, 0xfc, 0x7a, 0xc7, 0xf7, 0x3b, 0x2e, 0xb3, 0x03, + 0x27, 0x52, 0x9f, 0xf5, 0x30, 0x68, 0xd6, 0x23, 0x6e, 0xf3, 0x6e, 0x24, 0xd5, 0x99, 0xef, 0x0d, + 0xcb, 0x08, 0xf2, 0x51, 0xb7, 0x2d, 0x46, 0x62, 0x20, 0xbe, 0x14, 0x7b, 0x5d, 0x63, 0xc7, 0x85, + 0xd4, 0xe3, 0x85, 0xd4, 0xed, 0xc0, 0xa9, 0xf3, 0xf3, 0x80, 0x45, 0xf5, 0x33, 0x3f, 0x7c, 0xca, + 0x42, 0x25, 0x70, 0xed, 0x42, 0x81, 0xc8, 0x77, 0x4f, 0x59, 0x58, 0x0f, 0x8e, 0xea, 0x7e, 0x10, + 0xaf, 0xe6, 0x56, 0x02, 0x77, 0x37, 0x6c, 0xb2, 0xc0, 0x77, 0x9d, 0xe6, 0x39, 0xca, 0xc8, 0x2f, + 0x25, 0x76, 0xe3, 0x42, 0xb1, 0x2e, 0x77, 0x5c, 0x5c, 0x5a, 0xd3, 0x0e, 0x22, 0x14, 0xc3, 0xdf, + 0x31, 0x9e, 0x73, 0xdf, 0x73, 0x22, 0xee, 0x38, 0x1d, 0xa7, 0xde, 0x8e, 0x84, 0x8c, 0x74, 0x05, + 0x43, 0x25, 0xd9, 0xad, 0x3f, 0xa7, 0x21, 0x4b, 0x59, 0xd4, 0x75, 0x39, 0x59, 0x86, 0x52, 0xc8, + 0xda, 0x5b, 0x2c, 0x08, 0x59, 0xd3, 0xe6, 0xac, 0x55, 0x35, 0x96, 0x8c, 0x95, 0xfc, 0xee, 0x1c, + 0x1d, 0x24, 0x93, 0xef, 0x43, 0x39, 0x64, 0xed, 0x48, 0x63, 0x9c, 0x5f, 0x32, 0x56, 0x0a, 0x6b, + 0x57, 0x6b, 0x17, 0xe6, 0xb0, 0x46, 0x59, 0xfb, 0xc0, 0x0e, 0xfa, 0x22, 0xbb, 0x73, 0x74, 0x48, + 0x09, 0x59, 0x83, 0x54, 0xc8, 0xda, 0xd5, 0x94, 0xd0, 0x75, 0x25, 0x59, 0xd7, 0xee, 0x1c, 0x45, + 0x66, 0xb2, 0x0e, 0x69, 0xd4, 0x52, 0x4d, 0x0b, 0xa1, 0x37, 0x26, 0x2e, 0x60, 0x77, 0x8e, 0x0a, + 0x01, 0xf2, 0x00, 0x72, 0x27, 0x8c, 0xdb, 0x2d, 0x9b, 0xdb, 0x55, 0x58, 0x4a, 0xad, 0x14, 0xd6, + 0xea, 0x89, 0xc2, 0x18, 0xa0, 0xda, 0x81, 0x92, 0xd8, 0xf6, 0x78, 0x78, 0x4e, 0x7b, 0x0a, 0xc8, + 0x13, 0x28, 0xda, 0x9c, 0x33, 0x8c, 0xaa, 0xe3, 0x7b, 0x51, 0xb5, 0x28, 0x14, 0xde, 0x98, 0xac, + 0xf0, 0xbe, 0x26, 0x25, 0x95, 0x0e, 0x28, 0x32, 0xef, 0x42, 0x69, 0xc0, 0x26, 0xa9, 0x40, 0xea, + 0x29, 0x3b, 0x97, 0x89, 0xa1, 0xf8, 0x49, 0x2e, 0x43, 0xe6, 0xd4, 0x76, 0xbb, 0x4c, 0xe4, 0xa0, + 0x48, 0xe5, 0xe0, 0xce, 0xfc, 0x6d, 0xc3, 0x3c, 0x86, 0x4b, 0x23, 0xfa, 0xc7, 0x28, 0xf8, 0xae, + 0xae, 0xa0, 0xb0, 0xf6, 0x4e, 0xc2, 0xaa, 0x75, 0x75, 0x9a, 0xa5, 0x8d, 0x1c, 0x64, 0x43, 0xe1, + 0x90, 0xf5, 0x6b, 0x03, 0x2a, 0xc3, 0xa9, 0x26, 0x7b, 0x2a, 0x49, 0x86, 0x08, 0xcb, 0xad, 0x19, + 0x76, 0x09, 0x12, 0x54, 0x60, 0x84, 0x0a, 0x73, 0x1d, 0xf2, 0x3d, 0xd2, 0xa4, 0x60, 0xe4, 0xb5, + 0x25, 0x5a, 0xeb, 0x90, 0xa2, 0xac, 0x4d, 0xca, 0x30, 0xef, 0xa8, 0x7d, 0x4d, 0xe7, 0x9d, 0x16, + 0x59, 0x82, 0x54, 0x8b, 0xb5, 0x95, 0xeb, 0xe5, 0x5a, 0x70, 0x54, 0xdb, 0x62, 0x6d, 0xc7, 0x73, + 0xd0, 0x45, 0x8a, 0x53, 0xd6, 0x6f, 0x0d, 0x3c, 0x1f, 0xb8, 0x2c, 0xf2, 0xfe, 0x80, 0x1f, 0x93, + 0x77, 0xfb, 0xc8, 0xea, 0x9f, 0x24, 0xaf, 0xfe, 0xe6, 0x60, 0x26, 0x26, 0x1c, 0x01, 0xdd, 0xbb, + 0x1f, 0x40, 0x51, 0xcf, 0x0d, 0xd9, 0x85, 0x82, 0xb6, 0x8f, 0xd4, 0x82, 0x97, 0xa7, 0xcb, 0x2c, + 0xd5, 0x45, 0xad, 0xdf, 0xa7, 0xa0, 0xa0, 0x4d, 0x92, 0x7b, 0x90, 0x7e, 0xea, 0x78, 0x32, 0x84, + 0xe5, 0xb5, 0xd5, 0xe9, 0x54, 0x3e, 0x70, 0xbc, 0x16, 0x15, 0x72, 0xa4, 0xa1, 0x9d, 0xbb, 0x79, + 0xb1, 0xac, 0x9b, 0xd3, 0xe9, 0xb8, 0xf0, 0xf0, 0x5d, 0x9f, 0xa1, 0x6c, 0xc8, 0xa2, 0x41, 0x20, + 0x1d, 0xd8, 0xfc, 0x58, 0x14, 0x8d, 0x3c, 0x15, 0xdf, 0xe4, 0x3a, 0xbc, 0xe4, 0x78, 0x8f, 0x7d, + 0xee, 0x37, 0x42, 0xd6, 0x72, 0x70, 0xf3, 0x3d, 0x3e, 0x0f, 0x58, 0x35, 0x23, 0x58, 0xc6, 0x4d, + 0x91, 0x06, 0x94, 0x25, 0xf9, 0xb0, 0x7b, 0xf4, 0x23, 0xd6, 0xe4, 0x51, 0x35, 0x2b, 0xfc, 0x59, + 0x49, 0x58, 0xc2, 0x9e, 0x2e, 0x40, 0x87, 0xe4, 0x5f, 0xe8, 0xb4, 0x5b, 0x7f, 0x32, 0xa0, 0x34, + 0xa0, 0x9e, 0x7c, 0x30, 0x90, 0xaa, 0x6b, 0xd3, 0x2e, 0x4b, 0x4b, 0xd6, 0x87, 0x90, 0x6d, 0x39, + 0x1d, 0x16, 0x71, 0x91, 0xaa, 0xfc, 0xc6, 0xda, 0x57, 0x5f, 0xbf, 0x3e, 0xf7, 0xf7, 0xaf, 0x5f, + 0x5f, 0xd5, 0xae, 0x18, 0x3f, 0x60, 0x5e, 0xd3, 0xf7, 0xb8, 0xed, 0x78, 0x2c, 0xc4, 0xfb, 0xf8, + 0x3d, 0x29, 0x52, 0xdb, 0x12, 0x3f, 0x54, 0x69, 0xc0, 0xa0, 0x7b, 0xf6, 0x09, 0x13, 0x79, 0xca, + 0x53, 0xf1, 0x6d, 0x71, 0x28, 0x51, 0xc6, 0xbb, 0xa1, 0x47, 0xd9, 0x8f, 0xbb, 0xc8, 0xf4, 0xed, + 0xb8, 0x90, 0x88, 0x45, 0x4f, 0x2a, 0xe8, 0xc8, 0x48, 0x95, 0x00, 0x59, 0x81, 0x0c, 0x0b, 0x43, + 0x3f, 0x54, 0x87, 0x87, 0xd4, 0x24, 0x32, 0xa8, 0x85, 0x41, 0xb3, 0x76, 0x28, 0x90, 0x01, 0x95, + 0x0c, 0x56, 0x05, 0xca, 0xb1, 0xd5, 0x28, 0xf0, 0xbd, 0x88, 0x59, 0x8b, 0x18, 0xba, 0xa0, 0xcb, + 0x23, 0xb5, 0x0e, 0xeb, 0x4b, 0x03, 0xca, 0x31, 0x45, 0xf2, 0x90, 0x8f, 0xa1, 0xd0, 0x2f, 0x0d, + 0x71, 0x0d, 0xb8, 0x93, 0x18, 0x54, 0x5d, 0x5e, 0xab, 0x2b, 0xaa, 0x24, 0xe8, 0xea, 0xcc, 0x87, + 0x50, 0x19, 0x66, 0x18, 0x93, 0xfd, 0xb7, 0x06, 0x0b, 0xc4, 0x70, 0xbd, 0xd2, 0x76, 0xc3, 0x97, + 0xf3, 0xf0, 0x2a, 0x65, 0x02, 0x8a, 0xec, 0x9d, 0xd8, 0x1d, 0xb6, 0xe9, 0x7b, 0x6d, 0xa7, 0x13, + 0x87, 0xb9, 0x22, 0x8a, 0x61, 0xac, 0x19, 0xeb, 0xe2, 0x0a, 0xe4, 0x1a, 0xae, 0xcd, 0xdb, 0x7e, + 0x78, 0xa2, 0x94, 0x17, 0x51, 0x79, 0x4c, 0xa3, 0xbd, 0x59, 0xb2, 0x04, 0x05, 0xa5, 0xf8, 0xc0, + 0x6f, 0xc5, 0xe9, 0xd4, 0x49, 0xa4, 0x0a, 0x0b, 0xfb, 0x7e, 0xe7, 0x21, 0x26, 0x5b, 0x9e, 0xb0, + 0x78, 0x48, 0x2c, 0x28, 0x2a, 0xc6, 0xb0, 0x77, 0xba, 0x32, 0x74, 0x80, 0x46, 0x5e, 0x83, 0xfc, + 0x21, 0x8b, 0x22, 0xc7, 0xf7, 0xf6, 0xb6, 0xaa, 0x59, 0x21, 0xdf, 0x27, 0xa0, 0xee, 0x43, 0xee, + 0x87, 0x6c, 0x6f, 0xab, 0xba, 0x20, 0x75, 0xab, 0x21, 0x39, 0x80, 0xf2, 0xa1, 0xc0, 0x52, 0x0d, + 0x44, 0x50, 0x0e, 0x8b, 0xaa, 0x39, 0x91, 0xa2, 0xb7, 0x47, 0x53, 0xa4, 0x63, 0xae, 0x9a, 0x60, + 0x3f, 0xa7, 0x43, 0xc2, 0xd6, 0xaf, 0x0c, 0x30, 0xc7, 0x05, 0x50, 0xed, 0x86, 0x0f, 0x21, 0x2b, + 0xf7, 0xb7, 0x0c, 0xe2, 0x7f, 0x77, 0x32, 0xe4, 0x2f, 0x79, 0x05, 0xb2, 0x52, 0xbb, 0x3a, 0xd4, + 0x6a, 0x14, 0x67, 0x29, 0xd5, 0xcb, 0x92, 0xf5, 0x4f, 0x03, 0xaa, 0x6a, 0x51, 0x72, 0xb9, 0x58, + 0x2e, 0xe2, 0xa4, 0xbe, 0x05, 0x59, 0x49, 0x54, 0x67, 0x47, 0x24, 0x50, 0x52, 0x1e, 0x05, 0x54, + 0xcd, 0xcd, 0x90, 0x68, 0x2d, 0x8d, 0xa9, 0xc1, 0x34, 0x0e, 0x6d, 0x81, 0xf4, 0xe8, 0x16, 0xf8, + 0x1f, 0x27, 0xe3, 0x97, 0x46, 0x6f, 0x37, 0xeb, 0x7e, 0xab, 0x5c, 0x4c, 0xe7, 0xf8, 0x03, 0xc8, + 0x88, 0x44, 0x2a, 0xaf, 0x93, 0x51, 0x88, 0x66, 0x4a, 0x08, 0xc5, 0xb6, 0xa8, 0xd4, 0x61, 0xfd, + 0xb4, 0xbf, 0x3b, 0xc6, 0x70, 0xfd, 0x3f, 0x76, 0x87, 0xf5, 0xf3, 0x2c, 0x14, 0x0f, 0x71, 0x01, + 0x71, 0xfe, 0x6b, 0x00, 0xfd, 0x5a, 0xa0, 0x42, 0x31, 0x5c, 0x21, 0x34, 0x0e, 0x62, 0x42, 0x6e, + 0x47, 0x79, 0xac, 0xe0, 0x52, 0x6f, 0x4c, 0x3e, 0x82, 0x42, 0xfc, 0xfd, 0x28, 0xe0, 0xd5, 0x94, + 0x48, 0xde, 0xed, 0x84, 0x90, 0xe9, 0x2b, 0xa9, 0x69, 0xa2, 0xaa, 0xd4, 0x69, 0x14, 0x72, 0x0d, + 0x2e, 0xd9, 0xae, 0xeb, 0x9f, 0xa9, 0xfa, 0x2d, 0x2a, 0xb1, 0xa8, 0x04, 0x39, 0x3a, 0x3a, 0x81, + 0xf7, 0xb2, 0x46, 0xbc, 0x1f, 0x86, 0xf6, 0x39, 0x1e, 0x8a, 0xac, 0xe0, 0x1f, 0x37, 0x85, 0x57, + 0xe4, 0x8e, 0xe3, 0xd9, 0x6e, 0x15, 0x04, 0x8f, 0x1c, 0x60, 0xe9, 0xd9, 0x7e, 0x16, 0xf8, 0x21, + 0x67, 0xe1, 0x7d, 0xce, 0xc3, 0x6a, 0x41, 0x04, 0x73, 0x80, 0x46, 0x1a, 0x50, 0xdc, 0xb4, 0x9b, + 0xc7, 0x6c, 0xef, 0x04, 0x89, 0x31, 0x8c, 0x4f, 0xba, 0x38, 0x05, 0xfb, 0xa3, 0x40, 0xc7, 0xef, + 0xba, 0x06, 0xd2, 0x84, 0x72, 0xec, 0xba, 0xbc, 0x0e, 0xaa, 0x25, 0xa1, 0xf3, 0xee, 0xac, 0xa1, + 0x94, 0xd2, 0xd2, 0xc4, 0x90, 0x4a, 0x4c, 0xe4, 0x36, 0x56, 0x7e, 0x9b, 0xb3, 0x6a, 0x59, 0xf8, + 0xdc, 0x1b, 0x8f, 0x39, 0x88, 0x8b, 0x2f, 0x70, 0x10, 0xcd, 0x7b, 0x50, 0x19, 0x4e, 0xee, 0x2c, + 0x28, 0xdc, 0xfc, 0x1e, 0xbc, 0x34, 0xc6, 0xa3, 0x17, 0xba, 0xe9, 0xfe, 0x68, 0xc0, 0xa5, 0x91, + 0x34, 0x20, 0xda, 0x10, 0x37, 0x8c, 0x54, 0x29, 0xbe, 0xc9, 0x01, 0x64, 0x30, 0xcd, 0x91, 0xc2, + 0x9d, 0xeb, 0xb3, 0xe4, 0xb5, 0x26, 0x24, 0x65, 0xfc, 0xa5, 0x16, 0xf3, 0x36, 0x40, 0x9f, 0x38, + 0x53, 0x2f, 0xf2, 0x31, 0x94, 0x54, 0x92, 0x55, 0xbd, 0xa8, 0x48, 0x08, 0xab, 0x84, 0x11, 0xa2, + 0xf6, 0x81, 0x50, 0x6a, 0x46, 0x20, 0x64, 0x7d, 0x06, 0x8b, 0x94, 0xd9, 0xad, 0x1d, 0xc7, 0x65, + 0x17, 0xdf, 0xf7, 0x78, 0xf8, 0x1d, 0x97, 0x35, 0x10, 0x06, 0xc7, 0x87, 0x5f, 0x8d, 0xc9, 0x1d, + 0xc8, 0x50, 0xdb, 0xeb, 0x30, 0x65, 0xfa, 0xad, 0x04, 0xd3, 0xc2, 0x08, 0xf2, 0x52, 0x29, 0x62, + 0xdd, 0x85, 0x7c, 0x8f, 0x86, 0xa5, 0xeb, 0x51, 0xbb, 0x1d, 0x31, 0x59, 0x06, 0x53, 0x54, 0x8d, + 0x90, 0xbe, 0xcf, 0xbc, 0x8e, 0x32, 0x9d, 0xa2, 0x6a, 0x64, 0x2d, 0x63, 0xef, 0x18, 0xaf, 0x5c, + 0x85, 0x86, 0x40, 0x7a, 0x0b, 0x7b, 0x05, 0x43, 0x9c, 0x57, 0xf1, 0x6d, 0xb5, 0x10, 0xc0, 0xd9, + 0xad, 0x2d, 0x27, 0xbc, 0xd8, 0xc1, 0x2a, 0x2c, 0x6c, 0x39, 0xa1, 0xe6, 0x5f, 0x3c, 0x24, 0xcb, + 0x08, 0xed, 0x9a, 0x6e, 0xb7, 0x85, 0xde, 0x72, 0x16, 0x7a, 0xea, 0x7a, 0x1b, 0xa2, 0x5a, 0xef, + 0xcb, 0x38, 0x0a, 0x2b, 0x6a, 0x31, 0xd7, 0x60, 0x81, 0x79, 0x3c, 0xc4, 0x63, 0x24, 0xf1, 0x1f, + 0xa9, 0xc9, 0x67, 0x95, 0x9a, 0x78, 0x56, 0x11, 0x38, 0x93, 0xc6, 0x2c, 0xd6, 0xdf, 0x0c, 0x28, + 0xc9, 0xfa, 0x12, 0x2f, 0xf3, 0x56, 0xaf, 0x81, 0x9c, 0xee, 0xb5, 0x42, 0xbd, 0x55, 0xd0, 0x91, + 0x9e, 0xe9, 0x5b, 0x09, 0xa2, 0x03, 0x26, 0x2f, 0xea, 0x9a, 0x5e, 0xac, 0xd7, 0xa8, 0x40, 0x39, + 0xb6, 0xa2, 0x10, 0xf4, 0x3a, 0x2c, 0xa2, 0xf3, 0xc9, 0x9b, 0x8e, 0x40, 0x5a, 0x4b, 0x88, 0xf8, + 0xb6, 0xee, 0x40, 0xa5, 0x2f, 0xa8, 0xc2, 0xbc, 0x0c, 0x69, 0x6c, 0xfa, 0x54, 0x98, 0xc6, 0xc5, + 0x58, 0xcc, 0x5b, 0x6f, 0xc2, 0x62, 0x5c, 0xe8, 0x2e, 0x34, 0x6a, 0x11, 0xa8, 0xf4, 0x99, 0xd4, + 0x6a, 0x4b, 0x50, 0x68, 0x38, 0x5e, 0x0c, 0x87, 0xad, 0xe7, 0x06, 0x14, 0x1b, 0xbe, 0xd7, 0x47, + 0x77, 0x0d, 0x58, 0x8c, 0xcb, 0xd4, 0xfd, 0xc6, 0xde, 0xa6, 0x1d, 0xc4, 0xf9, 0x5e, 0x1a, 0x8d, + 0xbb, 0x7a, 0x84, 0xab, 0x49, 0xc6, 0x8d, 0x34, 0x5e, 0xf5, 0x74, 0x58, 0x9c, 0x7c, 0x00, 0x0b, + 0xfb, 0xfb, 0x1b, 0x42, 0xd3, 0xfc, 0x4c, 0x9a, 0x62, 0x31, 0x72, 0x0f, 0x16, 0x9e, 0x88, 0x07, + 0xc8, 0x48, 0x5d, 0xc7, 0x63, 0xce, 0xa5, 0x8c, 0x90, 0x64, 0xa3, 0xac, 0xe9, 0x87, 0x2d, 0x1a, + 0x0b, 0x59, 0xff, 0x32, 0xa0, 0xf0, 0xc4, 0xee, 0xb7, 0x5a, 0xfd, 0xde, 0xee, 0x05, 0x30, 0x8a, + 0xea, 0xed, 0x2e, 0x43, 0xc6, 0x65, 0xa7, 0xcc, 0x55, 0xe7, 0x59, 0x0e, 0x90, 0x1a, 0x1d, 0xfb, + 0xa1, 0x2c, 0x61, 0x45, 0x2a, 0x07, 0x78, 0xf8, 0x5b, 0x8c, 0xdb, 0x8e, 0x5b, 0x4d, 0x2f, 0xa5, + 0x10, 0xcf, 0xc8, 0x11, 0x66, 0xae, 0x1b, 0xba, 0xaa, 0xe1, 0xc6, 0x4f, 0x62, 0x41, 0xda, 0xf1, + 0xda, 0xbe, 0xb8, 0xeb, 0xd5, 0x15, 0xa0, 0xc0, 0x96, 0xd7, 0xf6, 0xa9, 0x98, 0x23, 0x6f, 0x40, + 0x36, 0xc4, 0x5a, 0x13, 0x55, 0x17, 0x44, 0x50, 0xf2, 0xc8, 0x25, 0x2b, 0x92, 0x9a, 0xb0, 0xca, + 0x50, 0x94, 0x7e, 0xab, 0xe4, 0xff, 0x61, 0x1e, 0x5e, 0x7a, 0xc8, 0xce, 0x36, 0x63, 0xbf, 0xe2, + 0x80, 0x2c, 0x41, 0xa1, 0x47, 0xdb, 0xdb, 0x52, 0x5b, 0x48, 0x27, 0xa1, 0xb1, 0x03, 0xbf, 0xeb, + 0xf1, 0x38, 0x87, 0xc2, 0x98, 0xa0, 0x50, 0x35, 0x41, 0xde, 0x86, 0x85, 0x87, 0x8c, 0x9f, 0xf9, + 0xe1, 0x53, 0xe1, 0x75, 0x79, 0xad, 0x80, 0x3c, 0x0f, 0x19, 0x47, 0x58, 0x4c, 0xe3, 0x39, 0x44, + 0xe1, 0x41, 0x8c, 0xc2, 0xd3, 0xe3, 0x50, 0x78, 0x3c, 0x4b, 0xd6, 0xa1, 0xd0, 0xf4, 0xbd, 0x88, + 0x87, 0xb6, 0x83, 0x86, 0x33, 0x82, 0xf9, 0x65, 0x64, 0x96, 0x89, 0xdd, 0xec, 0x4f, 0x52, 0x9d, + 0x93, 0xac, 0x02, 0xb0, 0x67, 0x3c, 0xb4, 0x77, 0xfd, 0xa8, 0xf7, 0x34, 0x01, 0x28, 0x87, 0x84, + 0xbd, 0x06, 0xd5, 0x66, 0xf1, 0x36, 0x38, 0xf6, 0x23, 0x2e, 0xfa, 0x73, 0xd9, 0x56, 0xf5, 0xc6, + 0xd6, 0x2b, 0x70, 0x79, 0x30, 0x5a, 0x2a, 0x8c, 0x77, 0xe1, 0x1b, 0x94, 0xb9, 0xcc, 0x8e, 0xd8, + 0xec, 0x91, 0xb4, 0x4c, 0xec, 0x63, 0x86, 0x85, 0x95, 0xe2, 0x7f, 0xa7, 0xa0, 0xb0, 0xfd, 0x8c, + 0x35, 0x0f, 0x58, 0x14, 0xd9, 0x1d, 0xd1, 0x10, 0x36, 0x42, 0xbf, 0xc9, 0xa2, 0xa8, 0xa7, 0xab, + 0x4f, 0x20, 0xdf, 0x81, 0xf4, 0x9e, 0xe7, 0x70, 0x85, 0x13, 0x96, 0x13, 0xfb, 0x71, 0x87, 0x2b, + 0x9d, 0xbb, 0x73, 0x54, 0x48, 0x91, 0x3b, 0x90, 0xc6, 0xca, 0x33, 0xcd, 0x4d, 0xd7, 0xd2, 0x64, + 0x51, 0x86, 0x6c, 0x88, 0x77, 0x73, 0xe7, 0x53, 0xa6, 0x32, 0xb8, 0x92, 0x7c, 0x45, 0x3b, 0x9f, + 0xb2, 0xbe, 0x06, 0x25, 0x49, 0xb6, 0xb1, 0x9d, 0xb5, 0x43, 0xce, 0x5a, 0x2a, 0xb3, 0xef, 0x26, + 0x01, 0x43, 0xc9, 0xd9, 0xd7, 0x12, 0xcb, 0x62, 0x10, 0xb6, 0x9f, 0x39, 0x5c, 0x9d, 0x94, 0xe5, + 0xc4, 0xcb, 0x61, 0x20, 0x08, 0x38, 0x44, 0xe9, 0x2d, 0xdf, 0x93, 0x99, 0x4f, 0x96, 0x46, 0x36, + 0x4d, 0x1a, 0x87, 0x18, 0x86, 0x43, 0xa7, 0x83, 0x78, 0x3b, 0x37, 0x31, 0x0c, 0x92, 0x51, 0x0b, + 0x83, 0x24, 0x6c, 0x2c, 0x40, 0x46, 0xc0, 0x41, 0xeb, 0x2f, 0x06, 0x14, 0xb4, 0x3c, 0x4d, 0x71, + 0x26, 0x5f, 0x83, 0x34, 0xde, 0x63, 0x2a, 0xff, 0x39, 0x71, 0x22, 0xb1, 0x39, 0x14, 0x54, 0x2c, + 0x2a, 0x3b, 0x2d, 0x59, 0x30, 0x4b, 0x14, 0x3f, 0x91, 0xf2, 0x98, 0x9f, 0x8b, 0x94, 0xe5, 0x28, + 0x7e, 0x92, 0x6b, 0x90, 0x3b, 0x64, 0xcd, 0x6e, 0xe8, 0xf0, 0x73, 0x91, 0x84, 0xf2, 0x5a, 0x45, + 0x94, 0x1a, 0x45, 0x13, 0x07, 0xb7, 0xc7, 0x41, 0xae, 0x42, 0x3e, 0x62, 0xcd, 0x90, 0x71, 0xe6, + 0x9d, 0xaa, 0x53, 0x55, 0x52, 0xec, 0x21, 0xe3, 0xdb, 0xde, 0x29, 0xed, 0xcf, 0x5b, 0x0f, 0x70, + 0x27, 0xf7, 0xbd, 0x21, 0x90, 0xde, 0xc4, 0x86, 0x19, 0xdd, 0x28, 0x51, 0xf1, 0x4d, 0x56, 0x20, + 0xb3, 0x3d, 0xe9, 0xd9, 0x6a, 0x3b, 0x7e, 0xb6, 0x1a, 0xdc, 0x01, 0x78, 0x8d, 0x69, 0x19, 0xb1, + 0xee, 0x43, 0xbe, 0xb7, 0x4b, 0x49, 0x19, 0xe6, 0x77, 0x5a, 0xca, 0xd2, 0xfc, 0x4e, 0x0b, 0xfd, + 0xde, 0x7e, 0xb4, 0x23, 0xac, 0xe4, 0x28, 0x7e, 0xf6, 0x90, 0x55, 0x4a, 0x43, 0x56, 0xeb, 0x50, + 0x1a, 0xd8, 0xaa, 0xc8, 0x44, 0xfd, 0xb3, 0x28, 0x5e, 0x32, 0x7e, 0x4b, 0x37, 0xdc, 0x48, 0xe8, + 0x12, 0x6e, 0xb8, 0x91, 0xf5, 0x26, 0x94, 0x06, 0x92, 0x8b, 0x4c, 0xe2, 0xe9, 0x40, 0x01, 0x70, + 0xfc, 0x5e, 0x65, 0xb0, 0x38, 0xf4, 0x28, 0x4c, 0xde, 0x86, 0xac, 0x7c, 0x7c, 0xac, 0xcc, 0x99, + 0xaf, 0x7e, 0xfe, 0xc5, 0xd2, 0xcb, 0x43, 0x0c, 0x72, 0x12, 0xd9, 0x36, 0xba, 0x5e, 0xcb, 0x65, + 0x15, 0x63, 0x2c, 0x9b, 0x9c, 0x34, 0xd3, 0xbf, 0xf8, 0xdd, 0x95, 0xb9, 0x55, 0x1b, 0x2e, 0x8d, + 0x3c, 0x68, 0x92, 0x37, 0x21, 0x7d, 0xc8, 0xdc, 0x76, 0x6c, 0x66, 0x84, 0x01, 0x27, 0xc9, 0x1b, + 0x90, 0xa2, 0xf6, 0x59, 0xc5, 0x30, 0xab, 0x9f, 0x7f, 0xb1, 0x74, 0x79, 0xf4, 0x55, 0xd4, 0x3e, + 0x93, 0x26, 0xd6, 0x7e, 0x53, 0x84, 0xfc, 0xfe, 0xfe, 0xc6, 0x46, 0xe8, 0xb4, 0x3a, 0x8c, 0xfc, + 0xcc, 0x00, 0x32, 0xfa, 0x56, 0x44, 0x6e, 0x4e, 0x7e, 0x62, 0x18, 0x7d, 0x9b, 0x33, 0x6f, 0xcd, + 0x28, 0xa5, 0x20, 0xcb, 0x4f, 0xe0, 0xd2, 0xc8, 0x0b, 0x09, 0xb9, 0x31, 0xed, 0x23, 0x87, 0xf6, + 0x8e, 0x64, 0xde, 0x9c, 0x4d, 0x48, 0xd9, 0xff, 0x08, 0x32, 0xa2, 0xa7, 0x21, 0xef, 0x4c, 0xd9, + 0xda, 0x9a, 0x2b, 0x93, 0x19, 0x95, 0xee, 0x26, 0xe4, 0xe2, 0xbe, 0x80, 0xac, 0x26, 0xae, 0x6e, + 0xa0, 0xed, 0x31, 0xaf, 0x4e, 0xc5, 0xab, 0x8c, 0xfc, 0x10, 0x16, 0x14, 0xdc, 0x27, 0xef, 0x4e, + 0x90, 0xeb, 0x37, 0x1e, 0xe6, 0xea, 0x34, 0xac, 0x7d, 0x37, 0x62, 0xa8, 0x9b, 0xe8, 0xc6, 0x10, + 0x90, 0x4e, 0x74, 0x63, 0x04, 0x3b, 0x37, 0xfb, 0x8f, 0x01, 0x89, 0x46, 0x86, 0x80, 0x73, 0xa2, + 0x91, 0x61, 0xfc, 0x4c, 0x9e, 0x40, 0x1a, 0xf1, 0x33, 0x49, 0xba, 0x2b, 0x34, 0x80, 0x6d, 0x26, + 0xed, 0x89, 0x01, 0xe0, 0xfd, 0x09, 0xde, 0xa9, 0xe2, 0xdd, 0x27, 0xf9, 0x36, 0xd5, 0xfe, 0x66, + 0x60, 0xbe, 0x3b, 0x05, 0x67, 0x5f, 0xbd, 0x7a, 0x33, 0x59, 0x99, 0xe2, 0xe1, 0x7e, 0xb2, 0xfa, + 0xa1, 0x3f, 0x11, 0x7c, 0x02, 0x59, 0xd9, 0x16, 0x25, 0xaa, 0x1f, 0xe8, 0xcf, 0x12, 0xd5, 0x0f, + 0xf6, 0x58, 0xc4, 0x87, 0xa2, 0x8e, 0xc4, 0x48, 0x2d, 0x41, 0x74, 0x0c, 0xc0, 0x35, 0xeb, 0x53, + 0xf3, 0x2b, 0x83, 0x9f, 0x61, 0x3f, 0x3e, 0x88, 0xd2, 0xc8, 0x5a, 0x62, 0xb4, 0xc7, 0xe2, 0x41, + 0xf3, 0xc6, 0x4c, 0x32, 0xca, 0xb8, 0x2d, 0x51, 0xa0, 0x42, 0x7a, 0x24, 0x19, 0xd4, 0xf4, 0xd0, + 0xa2, 0x39, 0x25, 0xdf, 0x8a, 0x71, 0xdd, 0xc0, 0x6d, 0x8c, 0x9d, 0x41, 0xa2, 0x6e, 0xad, 0x65, + 0x4a, 0xdc, 0xc6, 0x7a, 0x8b, 0xb1, 0x51, 0xfc, 0xea, 0xf9, 0x15, 0xe3, 0xaf, 0xcf, 0xaf, 0x18, + 0xff, 0x78, 0x7e, 0xc5, 0x38, 0xca, 0x8a, 0x7f, 0xb4, 0xb8, 0xf1, 0x9f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x94, 0x26, 0x3b, 0x9c, 0xf1, 0x22, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6289,37 +6049,20 @@ func (m *InitMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x20 } if len(m.Fds) > 0 { -<<<<<<< HEAD - dAtA29 := make([]byte, len(m.Fds)*10) - var j28 int - for _, num := range m.Fds { - for num >= 1<<7 { - dAtA29[j28] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j28++ - } - dAtA29[j28] = uint8(num) - j28++ - } - i -= j28 - copy(dAtA[i:], dAtA29[:j28]) - i = encodeVarintGateway(dAtA, i, uint64(j28)) -======= - dAtA32 := make([]byte, len(m.Fds)*10) - var j31 int + dAtA33 := make([]byte, len(m.Fds)*10) + var j32 int for _, num := range m.Fds { for num >= 1<<7 { - dAtA32[j31] = uint8(uint64(num)&0x7f | 0x80) + dAtA33[j32] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j31++ + j32++ } - dAtA32[j31] = uint8(num) - j31++ + dAtA33[j32] = uint8(num) + j32++ } - i -= j31 - copy(dAtA[i:], dAtA32[:j31]) - i = encodeVarintGateway(dAtA, i, uint64(j31)) ->>>>>>> v0.13.2 + i -= j32 + copy(dAtA[i:], dAtA33[:j32]) + i = encodeVarintGateway(dAtA, i, uint64(j32)) i-- dAtA[i] = 0x1a } diff --git a/go.mod b/go.mod index bd740e69b..b3be5a202 100644 --- a/go.mod +++ b/go.mod @@ -49,12 +49,7 @@ require ( github.com/moby/docker-image-spec v1.3.1 github.com/moby/locker v1.0.1 github.com/moby/patternmatcher v0.6.0 -<<<<<<< HEAD - github.com/moby/sys/mount v0.3.3 - github.com/moby/sys/mountinfo v0.6.2 -======= - github.com/moby/sys/mountinfo v0.7.1 ->>>>>>> v0.13.2 + github.com/moby/sys/mountinfo v0.7.2 github.com/moby/sys/signal v0.7.0 github.com/moby/sys/user v0.1.0 github.com/morikuni/aec v1.0.0 @@ -108,7 +103,10 @@ require ( kernel.org/pub/linux/libs/security/libcap/cap v1.2.67 ) -require github.com/docker/distribution v2.8.2+incompatible +require ( + github.com/docker/distribution v2.8.2+incompatible + github.com/moby/sys/mount v0.3.5 +) require ( github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect @@ -144,31 +142,20 @@ require ( github.com/docker/docker-credential-helpers v0.8.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect -<<<<<<< HEAD - github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 // indirect - github.com/felixge/httpsnoop v1.0.3 // indirect - github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7 // indirect - github.com/go-logr/logr v1.2.3 // indirect -======= + github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect github.com/felixge/fgprof v0.9.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/garyburd/redigo v1.6.4 // indirect github.com/go-logr/logr v1.3.0 // indirect ->>>>>>> v0.13.2 github.com/go-logr/stdr v1.2.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect -<<<<<<< HEAD - github.com/google/uuid v1.3.0 // indirect - github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33 // indirect - github.com/gorilla/mux v1.8.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect - github.com/hanwen/go-fuse/v2 v2.2.0 // indirect -======= github.com/google/pprof v0.0.0-20230323073829-e72429f035bd // indirect github.com/google/uuid v1.5.0 // indirect + github.com/gorilla/handlers v1.5.2 // indirect + github.com/gorilla/mux v1.8.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect github.com/hanwen/go-fuse/v2 v2.4.0 // indirect ->>>>>>> v0.13.2 github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-retryablehttp v0.7.5 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -186,22 +173,12 @@ require ( github.com/vbatts/tar-split v0.11.5 // indirect github.com/vishvananda/netns v0.0.4 // indirect go.opencensus.io v0.24.0 // indirect -<<<<<<< HEAD - go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0 // indirect - go.opentelemetry.io/otel/metric v0.37.0 // indirect - golang.org/x/mod v0.11.0 // indirect - golang.org/x/text v0.13.0 // indirect - golang.org/x/tools v0.10.0 // indirect - google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect -======= go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.42.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.14.0 // indirect google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect ->>>>>>> v0.13.2 + gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect kernel.org/pub/linux/libs/security/libcap/psx v1.2.67 // indirect ) diff --git a/go.sum b/go.sum index 05b447399..7d9987799 100644 --- a/go.sum +++ b/go.sum @@ -21,29 +21,7 @@ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg6 github.com/AzureAD/microsoft-authentication-library-for-go v0.6.0 h1:XMEdVDFxgulDDl0lQmAZS6j8gRQ/0pJ+ZpXH2FHVtDc= github.com/AzureAD/microsoft-authentication-library-for-go v0.6.0/go.mod h1:BDJ5qMFKx9DugEg3+uQSDCdbYPr5s9vBTrL9P8TpqOU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -<<<<<<< HEAD -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= -github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.0.3/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.1.0 h1:Y2lUDsFKVRSYGojLJ1yLxSXdMmMYTYls0rCvoqmMUQk= -github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.15-0.20200908182639-5b44b70ab3ab/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -======= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= ->>>>>>> v0.13.2 github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8= @@ -52,14 +30,8 @@ github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7l github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= 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= -<<<<<<< HEAD -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alexcb/fsutil v0.0.0-20231030221755-644b08355b65 h1:owMPrDW24IXzQwhrg6DAM7a5VFdOoRoQ4urVFCaGMy4= github.com/alexcb/fsutil v0.0.0-20231030221755-644b08355b65/go.mod h1:9kMVqMyQ/Sx2df5LtnGG+nbrmiZzCS7V6gjW3oGHsvI= -github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= -======= ->>>>>>> v0.13.2 github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092 h1:aM1rlcoLz8y5B2r4tTLMiVTrMtpfY0O8EScKJxaSaEc= github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092/go.mod h1:rYqSE9HbjzpHTI74vwPvae4ZVYZd1lue2ta6xHPdblA= github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 h1:7Ip0wMmLHLRJdrloDxZfhMm0xrLXZS8+COSu2bXmEQs= @@ -122,51 +94,12 @@ github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUo github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= -<<<<<<< HEAD -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= -github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1-0.20201117152358-0edc412565dc/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.7.8 h1:RkwgOW3AVUT3H/dyT0W03Dc8AzlpMG65lX48KftOFSM= -github.com/containerd/containerd v1.7.8/go.mod h1:L/Hn9qylJtUFT7cPeM0Sr3fATj+WjHwRQ0lyrYk3OPY= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.4.1/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= -github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM= -github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -======= github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro= github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= github.com/containerd/containerd v1.7.13 h1:wPYKIeGMN8vaggSKuV1X0wZulpMz4CrgEsZdaCyB6Is= github.com/containerd/containerd v1.7.13/go.mod h1:zT3up6yTRfEUa6+GsITYIJNgSVL9NQ4x4h1RPzk0Wu4= github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8= github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= ->>>>>>> v0.13.2 github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY= github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o= github.com/containerd/fuse-overlayfs-snapshotter v1.0.8 h1:O471INHO59/fnSVE+B+THGjvRA2d1K6/FdpUuhNnXwk= @@ -203,65 +136,25 @@ github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/ github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= -<<<<<<< HEAD -github.com/docker/cli v0.0.0-20190925022749-754388324470/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.0-beta1.0.20201029214301-1d20b15adc38+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v24.0.5+incompatible h1:WeBimjvS0eKdH4Ygx+ihVq1Q++xg36M/rMi4aXAvodc= -github.com/docker/cli v24.0.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.6.0-rc.1.0.20180327202408-83389a148052+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v1.4.2-0.20180531152204-71cd53e4a197/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v17.12.0-ce-rc1.0.20200730172259-9f28837c1d93+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.0-beta1.0.20201110211921-af34b94a78a1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v24.0.0-rc.2.0.20230905130451-032797ea4bcb+incompatible h1:1UUPAB9PAPUbM10+qIKPL5tKZ+VAddWgbQUf+x1QBfI= -github.com/docker/docker v24.0.0-rc.2.0.20230905130451-032797ea4bcb+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= -github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= -github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -======= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/docker/cli v25.0.3+incompatible h1:KLeNs7zws74oFuVhgZQ5ONGZiXUUdgsdy6/EsX/6284= github.com/docker/cli v25.0.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v25.0.3+incompatible h1:D5fy/lYmY7bvZa0XTZ5/UJPljor41F+vdyJG5luQLfQ= github.com/docker/docker v25.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8= github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= ->>>>>>> v0.13.2 github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -<<<<<<< HEAD -github.com/docker/libnetwork v0.8.0-dev.2.0.20200917202933-d0951081b35f/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -======= ->>>>>>> v0.13.2 +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= 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= @@ -276,21 +169,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -<<<<<<< HEAD -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7 h1:LofdAjjjqCSXMwLGgOgnE+rdPuvX9DxCqaHwKy7i/ko= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-critic/go-critic v0.4.1/go.mod h1:7/14rZGnZbY6E38VEGk2kVhoq6itzc1E68facVDK23g= -github.com/go-critic/go-critic v0.4.3/go.mod h1:j4O3D4RoIwRqlZw5jJpx0BNfXWWbpcJoKu5cYSe4YmQ= -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= -======= ->>>>>>> v0.13.2 +github.com/garyburd/redigo v1.6.4 h1:LFu2R3+ZOPgSMWMOL+saa/zXRjw0ID2G8FepO53BGlg= +github.com/garyburd/redigo v1.6.4/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -356,46 +236,12 @@ github.com/google/pprof v0.0.0-20230323073829-e72429f035bd/go.mod h1:79YE0hCXdHa github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -<<<<<<< HEAD -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/wire v0.3.0/go.mod h1:i1DMg/Lu8Sz5yYl25iOdmc5CT5qusaa+zmRWs16741s= -github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/goreleaser/goreleaser v0.136.0/go.mod h1:wiKrPUeSNh6Wu8nUHxZydSOVQ/OZvOaO7DTtFqie904= -github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhjYcR6G9w= -github.com/goreleaser/nfpm v1.3.0/go.mod h1:w0p7Kc9TAUgWMyrub63ex3M2Mgw88M4GZXoTq5UCb40= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33 h1:893HsJqtxp9z1SF76gg6hY70hRY1wVlTSnC/h1yUDCo= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= -======= github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= ->>>>>>> v0.13.2 +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= @@ -459,18 +305,13 @@ github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3N github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/patternmatcher v0.5.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= -<<<<<<< HEAD -github.com/moby/sys/mount v0.1.1/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= -======= ->>>>>>> v0.13.2 -github.com/moby/sys/mount v0.3.3 h1:fX1SVkXFJ47XWDoeFW4Sq7PdQJnV2QIDZAqjNqgEjUs= -github.com/moby/sys/mount v0.3.3/go.mod h1:PBaEorSNTLG5t/+4EgukEQVlAvVEc6ZjTySwKdqp5K0= +github.com/moby/sys/mount v0.3.5 h1:eS3fsZTjHaBihwjp4/+5Z3jxqLXYsbwxqpVSfFv3M00= +github.com/moby/sys/mount v0.3.5/go.mod h1:WUQDO+/uCiCIkIztx8SrwIDVn2dtMFRBebRhpDFT71M= github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= -github.com/moby/sys/mountinfo v0.7.1 h1:/tTvQaSJRr2FshkhXiIpux6fQ2Zvc4j7tAhMTStAG2g= -github.com/moby/sys/mountinfo v0.7.1/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= +github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= +github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI= @@ -504,30 +345,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= -<<<<<<< HEAD -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc92/go.mod h1:X1zlU4p7wOlX4+WRCz+hvlRv8phdL7UqbYD+vQwNMmE= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= -github.com/opencontainers/runc v1.1.9 h1:XR0VIHTGce5eWPkaPesqTBrhW2yAcaraWfsEalNwQLM= -github.com/opencontainers/runc v1.1.9/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.1.0-rc.2 h1:ucBtEms2tamYYW/SvGpvq9yUN0NEVL6oyLEwDcTSrk8= -github.com/opencontainers/runtime-spec v1.1.0-rc.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -======= github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg= github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= ->>>>>>> v0.13.2 github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -598,35 +417,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -<<<<<<< HEAD -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= -github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tetafro/godot v0.3.7/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= -github.com/tetafro/godot v0.4.2/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= -github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= -github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= -github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= -github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tommy-muehle/go-mnd v1.1.1/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= -github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= -github.com/tonistiigi/go-actions-cache v0.0.0-20220404170428-0bdeb6e1eac7 h1:8eY6m1mjgyB8XySUR7WvebTM8D/Vs86jLJzD/Tw7zkc= -github.com/tonistiigi/go-actions-cache v0.0.0-20220404170428-0bdeb6e1eac7/go.mod h1:qqvyZqkfwkoJuPU/bw61bItaoO0SJ8YSW0vSVRRvsRg= -======= -github.com/tonistiigi/fsutil v0.0.0-20240424095704-91a3fc46842c h1:+6wg/4ORAbnSoGDzg2Q1i3CeMcT/jjhye/ZfnBHy7/M= -github.com/tonistiigi/fsutil v0.0.0-20240424095704-91a3fc46842c/go.mod h1:vbbYqJlnswsbJqWUcJN8fKtBhnEgldDrcagTgnBVKKM= github.com/tonistiigi/go-actions-cache v0.0.0-20240227172821-a0b64f338598 h1:DA/NDC0YbMdnfcOSUzAnbUZE6dSM54d+0hrBqG+bOfs= github.com/tonistiigi/go-actions-cache v0.0.0-20240227172821-a0b64f338598/go.mod h1:anhKd3mnC1shAbQj1Q4IJ+w6xqezxnyDYlx/yKa7IXM= ->>>>>>> v0.13.2 github.com/tonistiigi/go-archvariant v1.0.0 h1:5LC1eDWiBNflnTF1prCiX09yfNHIxDC/aukdhCdTyb0= github.com/tonistiigi/go-archvariant v1.0.0/go.mod h1:TxFmO5VS6vMq2kvs3ht04iPXtu2rUT/erOnGFYfk5Ho= github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea h1:SXhTLE6pb6eld/v/cCndK0AMpt1wiVFb/YYmqB3/QG0= @@ -727,17 +519,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -<<<<<<< HEAD -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -======= golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= ->>>>>>> v0.13.2 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-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -754,15 +537,6 @@ golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -<<<<<<< HEAD -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -======= ->>>>>>> v0.13.2 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/hack/dockerfiles/lint.Dockerfile b/hack/dockerfiles/lint.Dockerfile index 179142251..611b2e33b 100644 --- a/hack/dockerfiles/lint.Dockerfile +++ b/hack/dockerfiles/lint.Dockerfile @@ -19,12 +19,8 @@ COPY --link --from=protolint-base /usr/local/bin/protolint /usr/local/bin/protol COPY --link --from=xx / / WORKDIR /go/src/github.com/moby/buildkit -<<<<<<< HEAD -FROM base AS golangci-lint -======= FROM base as golangci-lint ARG TARGETNAME ->>>>>>> v0.13.2 ARG BUILDTAGS ARG TARGETPLATFORM RUN --mount=target=/go/src/github.com/moby/buildkit \ @@ -33,13 +29,8 @@ RUN --mount=target=/go/src/github.com/moby/buildkit \ golangci-lint run --build-tags "${BUILDTAGS}" && \ touch /golangci-lint.done -<<<<<<< HEAD -FROM base AS yamllint -RUN --mount=target=/go/src/github.com/moby/buildkit --mount=target=/root/.cache,type=cache \ -======= FROM base as yamllint RUN --mount=target=/go/src/github.com/moby/buildkit \ ->>>>>>> v0.13.2 yamllint -c .yamllint.yml --strict . && \ touch /yamllint.done diff --git a/session/configurabletimeout.go b/session/configurabletimeout.go index d01abac39..932c32da5 100644 --- a/session/configurabletimeout.go +++ b/session/configurabletimeout.go @@ -5,13 +5,14 @@ import ( "time" "github.com/moby/buildkit/util/bklog" + "github.com/pkg/errors" "github.com/sirupsen/logrus" "google.golang.org/grpc" "google.golang.org/grpc/health/grpc_health_v1" ) -func configurableMonitorHealth(ctx context.Context, cc *grpc.ClientConn, cancelConn func(), healthCfg ManagerHealthCfg) { - defer cancelConn() +func configurableMonitorHealth(ctx context.Context, cc *grpc.ClientConn, cancelCause context.CancelCauseFunc, healthCfg ManagerHealthCfg) { + defer cancelCause(errors.WithStack(context.Canceled)) defer cc.Close() ticker := time.NewTicker(healthCfg.frequency) @@ -27,9 +28,10 @@ func configurableMonitorHealth(ctx context.Context, cc *grpc.ClientConn, cancelC case <-ticker.C: timeoutStart := time.Now().UTC() - ctx, cancel := context.WithTimeout(ctx, healthCfg.timeout) + ctx, cancel := context.WithCancelCause(ctx) + ctx, _ = context.WithTimeoutCause(ctx, healthCfg.timeout, errors.WithStack(context.DeadlineExceeded)) _, err := healthClient.Check(ctx, &grpc_health_v1.HealthCheckRequest{}) - cancel() + cancel(errors.WithStack(context.Canceled)) logFields := logrus.Fields{ "timeout": healthCfg.timeout, diff --git a/session/filesync/filesync.go b/session/filesync/filesync.go index f72cb0df9..aed7e87f4 100644 --- a/session/filesync/filesync.go +++ b/session/filesync/filesync.go @@ -235,51 +235,16 @@ func FSSync(ctx context.Context, c session.Caller, opt FSSendRequestOpt) error { return pr.recvFn(stream, opt.DestDir, opt.CacheUpdater, opt.ProgressCb, opt.Differ, opt.Filter) } -<<<<<<< HEAD -// NewFSSyncTargetDir allows writing into a directory -func NewFSSyncTargetDir(outdir string, verboseProgressCB fsutil.VerboseProgressCB) session.Attachable { - p := &fsSyncTarget{ - outdir: outdir, - verboseProgressCB: verboseProgressCB, - } - return p -} - -// NewFSSyncTarget allows writing into an io.WriteCloser -func NewFSSyncTarget(f func(map[string]string) (io.WriteCloser, error), verboseProgressCB fsutil.VerboseProgressCB) session.Attachable { - p := &fsSyncTarget{ - f: f, - verboseProgressCB: verboseProgressCB, - } - return p -} - -// NewFSSyncTarget allows writing into an io.WriteCloser; it is earthly-specific -func NewFSSyncMultiTarget(f func(map[string]string) (io.WriteCloser, error), outdirFunc func(map[string]string) (string, error), verboseProgressCB fsutil.VerboseProgressCB) session.Attachable { - p := &fsSyncTarget{ - f: f, - outdirFunc: outdirFunc, - verboseProgressCB: verboseProgressCB, - } - return p -} - -type fsSyncTarget struct { - outdir string - outdirFunc func(map[string]string) (string, error) //earthly - f func(map[string]string) (io.WriteCloser, error) - - verboseProgressCB fsutil.VerboseProgressCB -======= type FSSyncTarget interface { target() *fsSyncTarget } type fsSyncTarget struct { - id int - outdir string - f FileOutputFunc ->>>>>>> v0.13.2 + id int + outdir string + outdirFunc func(map[string]string) (string, error) // earthly + f FileOutputFunc + verboseProgressCB fsutil.VerboseProgressCB } func (target *fsSyncTarget) target() *fsSyncTarget { @@ -300,9 +265,30 @@ func WithFSSyncDir(id int, outdir string) FSSyncTarget { } } +// NewFSSyncTargetDir allows writing into a directory +func NewFSSyncTargetDir(outdir string, verboseProgressCB fsutil.VerboseProgressCB) session.Attachable { + return NewFSSyncTarget(&fsSyncTarget{ + id: 0, + outdir: outdir, + verboseProgressCB: verboseProgressCB, + }) +} + +// NewFSSyncTarget allows writing into an io.WriteCloser; it is earthly-specific +func NewFSSyncMultiTarget(f func(map[string]string) (io.WriteCloser, error), outdirFunc func(map[string]string) (string, error), verboseProgressCB fsutil.VerboseProgressCB) session.Attachable { + return NewFSSyncTarget(&fsSyncTarget{ + id: 0, + f: f, + outdirFunc: outdirFunc, + verboseProgressCB: verboseProgressCB, + }) +} + func NewFSSyncTarget(targets ...FSSyncTarget) session.Attachable { fs := make(map[int]FileOutputFunc) outdirs := make(map[int]string) + outdirFuncs := make(map[int]func(map[string]string) (string, error)) + progressCBs := make(map[int]fsutil.VerboseProgressCB) for _, t := range targets { t := t.target() if t.f != nil { @@ -311,27 +297,32 @@ func NewFSSyncTarget(targets ...FSSyncTarget) session.Attachable { if t.outdir != "" { outdirs[t.id] = t.outdir } + if t.outdirFunc != nil { + outdirFuncs[t.id] = t.outdirFunc + } + if t.verboseProgressCB != nil { + progressCBs[t.id] = t.verboseProgressCB + } } return &fsSyncAttachable{ - fs: fs, - outdirs: outdirs, + fs: fs, + outdirs: outdirs, + outdirFuncs: outdirFuncs, + progressCBs: progressCBs, } } type fsSyncAttachable struct { - fs map[int]FileOutputFunc - outdirs map[int]string + fs map[int]FileOutputFunc + outdirs map[int]string + outdirFuncs map[int]func(map[string]string) (string, error) + progressCBs map[int]fsutil.VerboseProgressCB } func (sp *fsSyncAttachable) Register(server *grpc.Server) { RegisterFileSendServer(server, sp) } -<<<<<<< HEAD -func (sp *fsSyncTarget) DiffCopy(stream FileSend_DiffCopyServer) (err error) { - if sp.outdir != "" { - return syncTargetDiffCopy(stream, sp.outdir, sp.verboseProgressCB) -======= func (sp *fsSyncAttachable) chooser(ctx context.Context) int { md, ok := metadata.FromIncomingContext(ctx) if !ok { @@ -350,13 +341,16 @@ func (sp *fsSyncAttachable) chooser(ctx context.Context) int { func (sp *fsSyncAttachable) DiffCopy(stream FileSend_DiffCopyServer) (err error) { id := sp.chooser(stream.Context()) + var verboseCB fsutil.VerboseProgressCB + if sp.progressCBs != nil { + verboseCB = sp.progressCBs[id] + } if outdir, ok := sp.outdirs[id]; ok { - return syncTargetDiffCopy(stream, outdir) + return syncTargetDiffCopy(stream, outdir, verboseCB) } f, ok := sp.fs[id] if !ok { return errors.Errorf("exporter %d not found", id) ->>>>>>> v0.13.2 } opts, _ := metadata.FromIncomingContext(stream.Context()) // if no metadata continue with empty object @@ -366,20 +360,18 @@ func (sp *fsSyncAttachable) DiffCopy(stream FileSend_DiffCopyServer) (err error) md[strings.TrimPrefix(k, keyExporterMetaPrefix)] = strings.Join(v, ",") } } -<<<<<<< HEAD - if sp.outdirFunc != nil { - outdir, err := sp.outdirFunc(md) - if err != nil { - return err - } - if outdir != "" { - return syncTargetDiffCopy(stream, outdir, sp.verboseProgressCB) + if sp.outdirFuncs != nil { + if outdirFunc, ok := sp.outdirFuncs[id]; ok && outdirFunc != nil { + outdir, err := outdirFunc(md) + if err != nil { + return err + } + if outdir != "" { + return syncTargetDiffCopy(stream, outdir, verboseCB) + } } } - wc, err := sp.f(md) -======= wc, err := f(md) ->>>>>>> v0.13.2 if err != nil { return err } @@ -421,7 +413,6 @@ func CopyToCaller(ctx context.Context, fs fsutil.FS, id int, c session.Caller, p return sendDiffCopy(cc, fs, progress) } -<<<<<<< HEAD // CopyToCallerWithMeta is earthly specific func CopyToCallerWithMeta(ctx context.Context, md map[string]string, fs fsutil.FS, c session.Caller, progress func(int, bool)) error { method := session.MethodURL(_FileSend_serviceDesc.ServiceName, "diffcopy") @@ -446,10 +437,7 @@ func CopyToCallerWithMeta(ctx context.Context, md map[string]string, fs fsutil.F return sendDiffCopy(cc, fs, progress) } -func CopyFileWriter(ctx context.Context, md map[string]string, c session.Caller) (io.WriteCloser, error) { -======= func CopyFileWriter(ctx context.Context, md map[string]string, id int, c session.Caller) (io.WriteCloser, error) { ->>>>>>> v0.13.2 method := session.MethodURL(_FileSend_serviceDesc.ServiceName, "diffcopy") if !c.Supports(method) { return nil, errors.Errorf("method %s not supported by the client", method) diff --git a/session/grpc.go b/session/grpc.go index 7f8b91343..ecfc4fd2b 100644 --- a/session/grpc.go +++ b/session/grpc.go @@ -41,11 +41,8 @@ func grpcClientConn(ctx context.Context, conn net.Conn, healthCfg ManagerHealthC dialOpts := []grpc.DialOption{ dialer, grpc.WithTransportCredentials(insecure.NewCredentials()), -<<<<<<< HEAD grpc.WithInitialWindowSize(65535 * 32), grpc.WithInitialConnWindowSize(65535 * 16), -======= ->>>>>>> v0.13.2 grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(defaults.DefaultMaxRecvMsgSize)), grpc.WithDefaultCallOptions(grpc.MaxCallSendMsgSize(defaults.DefaultMaxSendMsgSize)), } @@ -75,90 +72,8 @@ func grpcClientConn(ctx context.Context, conn net.Conn, healthCfg ManagerHealthC return nil, nil, errors.Wrap(err, "failed to create grpc client") } -<<<<<<< HEAD - ctx, cancel := context.WithCancel(ctx) - go configurableMonitorHealth(ctx, cc, cancel, healthCfg) -======= ctx, cancel := context.WithCancelCause(ctx) - go monitorHealth(ctx, cc, cancel) ->>>>>>> v0.13.2 + go configurableMonitorHealth(ctx, cc, cancel, healthCfg) return ctx, cc, nil } - -<<<<<<< HEAD -// func monitorHealth(ctx context.Context, cc *grpc.ClientConn, cancelConn func()) { -// defer cancelConn() -// defer cc.Close() -======= -func monitorHealth(ctx context.Context, cc *grpc.ClientConn, cancelConn func(error)) { - defer cancelConn(errors.WithStack(context.Canceled)) - defer cc.Close() ->>>>>>> v0.13.2 - -// ticker := time.NewTicker(5 * time.Second) -// defer ticker.Stop() -// healthClient := grpc_health_v1.NewHealthClient(cc) - -// failedBefore := false -// consecutiveSuccessful := 0 -// defaultHealthcheckDuration := 30 * time.Second -// lastHealthcheckDuration := time.Duration(0) - -// for { -// select { -// case <-ctx.Done(): -// return -// case <-ticker.C: -// // This healthcheck can erroneously fail in some instances, such as receiving lots of data in a low-bandwidth scenario or too many concurrent builds. -// // So, this healthcheck is purposely long, and can tolerate some failures on purpose. - -// healthcheckStart := time.Now() - -<<<<<<< HEAD -// timeout := time.Duration(math.Max(float64(defaultHealthcheckDuration), float64(lastHealthcheckDuration)*1.5)) -// ctx, cancel := context.WithTimeout(ctx, timeout) -// _, err := healthClient.Check(ctx, &grpc_health_v1.HealthCheckRequest{}) -// cancel() -======= - timeout := time.Duration(math.Max(float64(defaultHealthcheckDuration), float64(lastHealthcheckDuration)*1.5)) - - ctx, cancel := context.WithCancelCause(ctx) - ctx, _ = context.WithTimeoutCause(ctx, timeout, errors.WithStack(context.DeadlineExceeded)) - _, err := healthClient.Check(ctx, &grpc_health_v1.HealthCheckRequest{}) - cancel(errors.WithStack(context.Canceled)) ->>>>>>> v0.13.2 - -// lastHealthcheckDuration = time.Since(healthcheckStart) -// logFields := logrus.Fields{ -// "timeout": timeout, -// "actualDuration": lastHealthcheckDuration, -// } - -// if err != nil { -// select { -// case <-ctx.Done(): -// return -// default: -// } -// if failedBefore { -// bklog.G(ctx).Error("healthcheck failed fatally") -// return -// } - -// failedBefore = true -// consecutiveSuccessful = 0 -// bklog.G(ctx).WithFields(logFields).Warn("healthcheck failed") -// } else { -// consecutiveSuccessful++ - -// if consecutiveSuccessful >= 5 && failedBefore { -// failedBefore = false -// bklog.G(ctx).WithFields(logFields).Debug("reset healthcheck failure") -// } -// } - -// bklog.G(ctx).WithFields(logFields).Trace("healthcheck completed") -// } -// } -// } diff --git a/session/manager.go b/session/manager.go index d405fab29..263a64333 100644 --- a/session/manager.go +++ b/session/manager.go @@ -219,18 +219,13 @@ func (sm *Manager) HandleConn(ctx context.Context, conn net.Conn, opts map[strin // caller needs to take lock, this function will release it func (sm *Manager) handleConn(ctx context.Context, conn net.Conn, opts map[string][]string) error { -<<<<<<< HEAD if sm.stop { sm.mu.Unlock() return errors.New("shutting down") } - ctx, cancel := context.WithCancel(ctx) - defer cancel() -======= ctx, cancel := context.WithCancelCause(ctx) defer cancel(errors.WithStack(context.Canceled)) ->>>>>>> v0.13.2 opts = canonicalHeaders(opts) diff --git a/session/socketforward/copy.go b/session/socketforward/copy.go index 97193790a..526db3272 100644 --- a/session/socketforward/copy.go +++ b/session/socketforward/copy.go @@ -1,10 +1,10 @@ package socketforward import ( + "context" "io" "github.com/pkg/errors" - context "golang.org/x/net/context" "golang.org/x/sync/errgroup" ) @@ -29,7 +29,7 @@ func Copy(ctx context.Context, conn io.ReadWriteCloser, stream Stream, closeStre select { case <-ctx.Done(): conn.Close() - return ctx.Err() + return context.Cause(ctx) default: } if _, err := conn.Write(p.Data); err != nil { @@ -55,7 +55,7 @@ func Copy(ctx context.Context, conn io.ReadWriteCloser, stream Stream, closeStre } select { case <-ctx.Done(): - return ctx.Err() + return context.Cause(ctx) default: } p := &BytesMessage{Data: buf[:n]} diff --git a/session/socketforward/socket.go b/session/socketforward/socket.go index 7838e51be..10e545424 100644 --- a/session/socketforward/socket.go +++ b/session/socketforward/socket.go @@ -1,13 +1,13 @@ package socketforward import ( + "context" "net" "os" "path/filepath" "github.com/moby/buildkit/session" "github.com/pkg/errors" - context "golang.org/x/net/context" "golang.org/x/sync/errgroup" "google.golang.org/grpc/metadata" ) @@ -23,7 +23,7 @@ func (s *server) run(ctx context.Context, l net.Listener, id string) error { eg.Go(func() error { <-ctx.Done() - return ctx.Err() + return context.Cause(ctx) }) eg.Go(func() error { diff --git a/solver/jobs.go b/solver/jobs.go index 4c910afd5..cb0bef761 100644 --- a/solver/jobs.go +++ b/solver/jobs.go @@ -333,14 +333,10 @@ func (jl *Solver) setEdge(e Edge, targetEdge *edge) { return } -<<<<<<< HEAD - st.setEdge(e.Index, targetEdge) -======= // potentially passing nil targetSt is intentional and handled in st.setEdge targetSt := jl.actives[targetEdge.edge.Vertex.Digest()] st.setEdge(e.Index, targetEdge, targetSt) ->>>>>>> v0.13.2 } func (jl *Solver) getState(e Edge) *state { diff --git a/solver/llbsolver/bridge.go b/solver/llbsolver/bridge.go index a7f264bb7..b27365148 100644 --- a/solver/llbsolver/bridge.go +++ b/solver/llbsolver/bridge.go @@ -12,14 +12,10 @@ import ( "github.com/moby/buildkit/cache" "github.com/moby/buildkit/cache/remotecache" "github.com/moby/buildkit/client" -<<<<<<< HEAD - "github.com/moby/buildkit/client/llb" - "github.com/moby/buildkit/exporter" -======= "github.com/moby/buildkit/client/llb/sourceresolver" "github.com/moby/buildkit/executor" resourcestypes "github.com/moby/buildkit/executor/resources/types" ->>>>>>> v0.13.2 + "github.com/moby/buildkit/exporter" "github.com/moby/buildkit/frontend" gw "github.com/moby/buildkit/frontend/gateway/client" "github.com/moby/buildkit/identity" @@ -192,7 +188,6 @@ func (b *llbBridge) loadResult(ctx context.Context, def *pb.Definition, cacheImp return res, nil } -<<<<<<< HEAD // getExporter is earthly specific code which extracts the configured exporter // from the job's metadata func (b *llbBridge) getExporter(ctx context.Context) (*ExporterRequest, error) { @@ -209,6 +204,9 @@ func (b *llbBridge) getExporter(ctx context.Context) (*ExporterRequest, error) { return exp, nil } +// Export is an EarthBuild-specific method that exports output artifacts on-demand +// using the exporter configured for this build job, allowing frontend/gateway +// callers to emit exports during build execution rather than only at completion. func (b *llbBridge) Export(ctx context.Context, refs map[string]cache.ImmutableRef, metadata map[string][]byte) error { // generate an ID that's consistent for the refs refKeys := []string{} @@ -226,21 +224,34 @@ func (b *llbBridge) Export(ctx context.Context, refs map[string]cache.ImmutableR if err != nil { return err } - if exp.Exporter == nil { + if len(exp.Exporters) == 0 { return errors.Errorf("Export had no exporter configured") } - return inBuilderContext(ctx, b.builder, exp.Exporter.Name(), id, func(ctx context.Context, g session.Group) error { - sessionIDs := session.AllSessionIDs(g) - if len(sessionIDs) == 0 { - return errors.Errorf("group has no session IDs") // shouldnt happen + for i, e := range exp.Exporters { + expID := id + if len(exp.Exporters) > 1 { + expID = fmt.Sprintf("%s-%d", id, i) } - sessionID := sessionIDs[0] - var err error - _, _, err = exp.Exporter.Export(ctx, inp, sessionID) - return err - }) -======= + err := inBuilderContext(ctx, b.builder, e.Name(), expID, func(ctx context.Context, g session.Group) error { + sessionIDs := session.AllSessionIDs(g) + if len(sessionIDs) == 0 { + return errors.Errorf("group has no session IDs") // shouldnt happen + } + sessionID := sessionIDs[0] + _, descRef, err := e.Export(ctx, inp, nil, sessionID) + if descRef != nil { + descRef.Release() + } + return err + }) + if err != nil { + return err + } + } + return nil +} + func (b *llbBridge) validateEntitlements(p executor.ProcessInfo) error { ent, err := loadEntitlements(b.builder) if err != nil { @@ -285,7 +296,6 @@ func (b *llbBridge) loadExecutor() error { b.executor = w.Executor() }) return b.executorErr ->>>>>>> v0.13.2 } type resultProxy struct { diff --git a/solver/llbsolver/mounts/mount.go b/solver/llbsolver/mounts/mount.go index e14eb4fb7..3ecabb098 100644 --- a/solver/llbsolver/mounts/mount.go +++ b/solver/llbsolver/mounts/mount.go @@ -279,7 +279,7 @@ type sockMountInstance struct { } func (sm *sockMountInstance) Mount() ([]mount.Mount, func() error, error) { - ctx, cancel := context.WithCancel(context.TODO()) + ctx, cancel := context.WithCancelCause(context.TODO()) uid := int(sm.sm.mount.SockOpt.Uid) gid := int(sm.sm.mount.SockOpt.Gid) @@ -290,7 +290,7 @@ func (sm *sockMountInstance) Mount() ([]mount.Mount, func() error, error) { GID: gid, }) if err != nil { - cancel() + cancel(err) return nil, nil, err } uid = identity.UID @@ -304,7 +304,7 @@ func (sm *sockMountInstance) Mount() ([]mount.Mount, func() error, error) { Mode: int(sm.sm.mount.SockOpt.Mode & 0777), }) if err != nil { - cancel() + cancel(err) return nil, nil, err } release := func() error { @@ -312,7 +312,7 @@ func (sm *sockMountInstance) Mount() ([]mount.Mount, func() error, error) { if cleanup != nil { err = cleanup() } - cancel() + cancel(err) return err } diff --git a/solver/pb/caps.go b/solver/pb/caps.go index e255b78c5..92950755e 100644 --- a/solver/pb/caps.go +++ b/solver/pb/caps.go @@ -60,11 +60,8 @@ const ( CapExecMountTmpfsSize apicaps.CapID = "exec.mount.tmpfs.size" CapExecMountSecret apicaps.CapID = "exec.mount.secret" CapExecMountSSH apicaps.CapID = "exec.mount.ssh" -<<<<<<< HEAD CapExecMountSock apicaps.CapID = "exec.mount.sock" -======= CapExecMountContentCache apicaps.CapID = "exec.mount.cache.content" ->>>>>>> v0.13.2 CapExecCgroupsMounted apicaps.CapID = "exec.cgroup" CapExecSecretEnv apicaps.CapID = "exec.secretenv" @@ -366,11 +363,13 @@ func init() { }) Caps.Init(apicaps.Cap{ -<<<<<<< HEAD ID: CapExecMountSock, -======= + Enabled: true, + Status: apicaps.CapStatusExperimental, + }) + + Caps.Init(apicaps.Cap{ ID: CapExecMountContentCache, ->>>>>>> v0.13.2 Enabled: true, Status: apicaps.CapStatusExperimental, }) diff --git a/solver/pb/ops.pb.go b/solver/pb/ops.pb.go index d8c093c44..89bfeb437 100644 --- a/solver/pb/ops.pb.go +++ b/solver/pb/ops.pb.go @@ -806,20 +806,6 @@ func (m *SecretEnv) GetOptional() bool { // Mount specifies how to mount an input Op as a filesystem. type Mount struct { -<<<<<<< HEAD - Input InputIndex `protobuf:"varint,1,opt,name=input,proto3,customtype=InputIndex" json:"input"` - Selector string `protobuf:"bytes,2,opt,name=selector,proto3" json:"selector,omitempty"` - Dest string `protobuf:"bytes,3,opt,name=dest,proto3" json:"dest,omitempty"` - Output OutputIndex `protobuf:"varint,4,opt,name=output,proto3,customtype=OutputIndex" json:"output"` - Readonly bool `protobuf:"varint,5,opt,name=readonly,proto3" json:"readonly,omitempty"` - MountType MountType `protobuf:"varint,6,opt,name=mountType,proto3,enum=pb.MountType" json:"mountType,omitempty"` - TmpfsOpt *TmpfsOpt `protobuf:"bytes,19,opt,name=TmpfsOpt,proto3" json:"TmpfsOpt,omitempty"` - CacheOpt *CacheOpt `protobuf:"bytes,20,opt,name=cacheOpt,proto3" json:"cacheOpt,omitempty"` - SecretOpt *SecretOpt `protobuf:"bytes,21,opt,name=secretOpt,proto3" json:"secretOpt,omitempty"` - SSHOpt *SSHOpt `protobuf:"bytes,22,opt,name=SSHOpt,proto3" json:"SSHOpt,omitempty"` - ResultID string `protobuf:"bytes,23,opt,name=resultID,proto3" json:"resultID,omitempty"` - SockOpt *SockOpt `protobuf:"bytes,100,opt,name=SockOpt,proto3" json:"SockOpt,omitempty"` -======= Input InputIndex `protobuf:"varint,1,opt,name=input,proto3,customtype=InputIndex" json:"input"` Selector string `protobuf:"bytes,2,opt,name=selector,proto3" json:"selector,omitempty"` Dest string `protobuf:"bytes,3,opt,name=dest,proto3" json:"dest,omitempty"` @@ -832,7 +818,7 @@ type Mount struct { SSHOpt *SSHOpt `protobuf:"bytes,22,opt,name=SSHOpt,proto3" json:"SSHOpt,omitempty"` ResultID string `protobuf:"bytes,23,opt,name=resultID,proto3" json:"resultID,omitempty"` ContentCache MountContentCache `protobuf:"varint,24,opt,name=contentCache,proto3,enum=pb.MountContentCache" json:"contentCache,omitempty"` ->>>>>>> v0.13.2 + SockOpt *SockOpt `protobuf:"bytes,100,opt,name=SockOpt,proto3" json:"SockOpt,omitempty"` } func (m *Mount) Reset() { *m = Mount{} } @@ -927,19 +913,18 @@ func (m *Mount) GetResultID() string { return "" } -<<<<<<< HEAD -func (m *Mount) GetSockOpt() *SockOpt { - if m != nil { - return m.SockOpt - } - return nil -======= func (m *Mount) GetContentCache() MountContentCache { if m != nil { return m.ContentCache } return MountContentCache_DEFAULT ->>>>>>> v0.13.2 +} + +func (m *Mount) GetSockOpt() *SockOpt { + if m != nil { + return m.SockOpt + } + return nil } // TmpfsOpt defines options describing tpmfs mounts @@ -2991,340 +2976,174 @@ func init() { func init() { proto.RegisterFile("ops.proto", fileDescriptor_8de16154b2733812) } var fileDescriptor_8de16154b2733812 = []byte{ -<<<<<<< HEAD - // 2614 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x4f, 0x6f, 0x1b, 0xc7, - 0x15, 0x17, 0xff, 0x93, 0x8f, 0x12, 0xcd, 0x8c, 0x9d, 0x84, 0x51, 0x5d, 0x59, 0xd9, 0xa4, 0x81, - 0x2c, 0xdb, 0x32, 0xaa, 0x00, 0x71, 0x60, 0x04, 0x05, 0x24, 0x91, 0x8e, 0x18, 0xc7, 0xa2, 0x3a, - 0x94, 0x9d, 0x02, 0x2d, 0x60, 0xac, 0x76, 0x87, 0xd4, 0x42, 0xcb, 0x9d, 0xc5, 0xee, 0xd0, 0x12, - 0x7b, 0xe8, 0xa1, 0xa7, 0x1e, 0x03, 0x14, 0xe8, 0xad, 0xe8, 0x97, 0xe8, 0xb1, 0x45, 0xaf, 0x01, - 0x72, 0xc9, 0xa1, 0x87, 0xa0, 0x87, 0xb4, 0x70, 0x2e, 0xfd, 0x10, 0x2d, 0x50, 0xbc, 0x37, 0xb3, - 0x7f, 0x48, 0xc9, 0x70, 0xdc, 0x06, 0x3d, 0x71, 0xf6, 0xf7, 0x7e, 0xf3, 0xe6, 0xcd, 0x9b, 0xf7, - 0x66, 0xde, 0x0c, 0xa1, 0x21, 0xc3, 0x78, 0x2b, 0x8c, 0xa4, 0x92, 0xac, 0x18, 0x1e, 0xaf, 0xde, - 0x19, 0x7b, 0xea, 0x64, 0x7a, 0xbc, 0xe5, 0xc8, 0xc9, 0xdd, 0xb1, 0x1c, 0xcb, 0xbb, 0x24, 0x3a, - 0x9e, 0x8e, 0xe8, 0x8b, 0x3e, 0xa8, 0xa5, 0xbb, 0x58, 0xff, 0x2c, 0x42, 0x71, 0x10, 0xb2, 0xb7, - 0xa1, 0xea, 0x05, 0xe1, 0x54, 0xc5, 0x9d, 0xc2, 0x7a, 0x69, 0xa3, 0xb9, 0xdd, 0xd8, 0x0a, 0x8f, - 0xb7, 0xfa, 0x88, 0x70, 0x23, 0x60, 0xeb, 0x50, 0x16, 0xe7, 0xc2, 0xe9, 0x14, 0xd7, 0x0b, 0x1b, - 0xcd, 0x6d, 0x40, 0x42, 0xef, 0x5c, 0x38, 0x83, 0x70, 0x7f, 0x89, 0x93, 0x84, 0xbd, 0x07, 0xd5, - 0x58, 0x4e, 0x23, 0x47, 0x74, 0x4a, 0xc4, 0x59, 0x46, 0xce, 0x90, 0x10, 0x62, 0x19, 0x29, 0x6a, - 0x1a, 0x79, 0xbe, 0xe8, 0x94, 0x33, 0x4d, 0x0f, 0x3c, 0x5f, 0x73, 0x48, 0xc2, 0xde, 0x81, 0xca, - 0xf1, 0xd4, 0xf3, 0xdd, 0x4e, 0x85, 0x28, 0x4d, 0xa4, 0xec, 0x22, 0x40, 0x1c, 0x2d, 0x43, 0xd2, - 0x44, 0x44, 0x63, 0xd1, 0xa9, 0x66, 0xa4, 0x47, 0x08, 0x68, 0x12, 0xc9, 0x70, 0x2c, 0xd7, 0x1b, - 0x8d, 0x3a, 0xb5, 0x6c, 0xac, 0xae, 0x37, 0x1a, 0xe9, 0xb1, 0x50, 0xc2, 0x36, 0xa0, 0x1e, 0xfa, - 0xb6, 0x1a, 0xc9, 0x68, 0xd2, 0x81, 0xcc, 0xee, 0x43, 0x83, 0xf1, 0x54, 0xca, 0xee, 0x41, 0xd3, - 0x91, 0x41, 0xac, 0x22, 0xdb, 0x0b, 0x54, 0xdc, 0x69, 0x12, 0xf9, 0x75, 0x24, 0x7f, 0x26, 0xa3, - 0x53, 0x11, 0xed, 0x65, 0x42, 0x9e, 0x67, 0xee, 0x96, 0xa1, 0x28, 0x43, 0xeb, 0x77, 0x05, 0xa8, - 0x27, 0x5a, 0x99, 0x05, 0xcb, 0x3b, 0x91, 0x73, 0xe2, 0x29, 0xe1, 0xa8, 0x69, 0x24, 0x3a, 0x85, - 0xf5, 0xc2, 0x46, 0x83, 0xcf, 0x61, 0xac, 0x05, 0xc5, 0xc1, 0x90, 0xfc, 0xdd, 0xe0, 0xc5, 0xc1, - 0x90, 0x75, 0xa0, 0xf6, 0xc4, 0x8e, 0x3c, 0x3b, 0x50, 0xe4, 0xe0, 0x06, 0x4f, 0x3e, 0xd9, 0x75, - 0x68, 0x0c, 0x86, 0x4f, 0x44, 0x14, 0x7b, 0x32, 0x20, 0xb7, 0x36, 0x78, 0x06, 0xb0, 0x35, 0x80, - 0xc1, 0xf0, 0x81, 0xb0, 0x51, 0x69, 0xdc, 0xa9, 0xac, 0x97, 0x36, 0x1a, 0x3c, 0x87, 0x58, 0xbf, - 0x82, 0x0a, 0x2d, 0x35, 0xfb, 0x04, 0xaa, 0xae, 0x37, 0x16, 0xb1, 0xd2, 0xe6, 0xec, 0x6e, 0x7f, - 0xf1, 0xcd, 0x8d, 0xa5, 0xbf, 0x7d, 0x73, 0x63, 0x33, 0x17, 0x53, 0x32, 0x14, 0x81, 0x23, 0x03, - 0x65, 0x7b, 0x81, 0x88, 0xe2, 0xbb, 0x63, 0x79, 0x47, 0x77, 0xd9, 0xea, 0xd2, 0x0f, 0x37, 0x1a, - 0xd8, 0x4d, 0xa8, 0x78, 0x81, 0x2b, 0xce, 0xc9, 0xfe, 0xd2, 0xee, 0x55, 0xa3, 0xaa, 0x39, 0x98, - 0xaa, 0x70, 0xaa, 0xfa, 0x28, 0xe2, 0x9a, 0x61, 0x7d, 0x59, 0x80, 0xaa, 0x0e, 0x25, 0x76, 0x1d, - 0xca, 0x13, 0xa1, 0x6c, 0x1a, 0xbf, 0xb9, 0x5d, 0xd7, 0x4b, 0xaa, 0x6c, 0x4e, 0x28, 0x46, 0xe9, - 0x44, 0x4e, 0xd1, 0xf7, 0xc5, 0x2c, 0x4a, 0x1f, 0x21, 0xc2, 0x8d, 0x80, 0xfd, 0x08, 0x6a, 0x81, - 0x50, 0x67, 0x32, 0x3a, 0x25, 0x1f, 0xb5, 0x74, 0x58, 0x1c, 0x08, 0xf5, 0x48, 0xba, 0x82, 0x27, - 0x32, 0x76, 0x1b, 0xea, 0xb1, 0x70, 0xa6, 0x91, 0xa7, 0x66, 0xe4, 0xaf, 0xd6, 0x76, 0x9b, 0x82, - 0xd5, 0x60, 0x44, 0x4e, 0x19, 0xec, 0x16, 0x34, 0x62, 0xe1, 0x44, 0x42, 0x89, 0xe0, 0x19, 0xf9, - 0xaf, 0xb9, 0xbd, 0x62, 0xe8, 0x91, 0x50, 0xbd, 0xe0, 0x19, 0xcf, 0xe4, 0xd6, 0x97, 0x45, 0x28, - 0xa3, 0xcd, 0x8c, 0x41, 0xd9, 0x8e, 0xc6, 0x3a, 0xa3, 0x1a, 0x9c, 0xda, 0xac, 0x0d, 0x25, 0xd4, - 0x51, 0x24, 0x08, 0x9b, 0x88, 0x38, 0x67, 0xae, 0x59, 0x50, 0x6c, 0x62, 0xbf, 0x69, 0x2c, 0x22, - 0xb3, 0x8e, 0xd4, 0x66, 0x37, 0xa1, 0x11, 0x46, 0xf2, 0x7c, 0xf6, 0x54, 0x5b, 0x90, 0x45, 0x29, - 0x82, 0x68, 0x40, 0x3d, 0x34, 0x2d, 0xb6, 0x09, 0x20, 0xce, 0x55, 0x64, 0xef, 0xcb, 0x58, 0xc5, - 0x9d, 0x2a, 0x59, 0x4b, 0x71, 0x8f, 0x40, 0xff, 0x90, 0xe7, 0xa4, 0x6c, 0x15, 0xea, 0x27, 0x32, - 0x56, 0x81, 0x3d, 0x11, 0x94, 0x21, 0x0d, 0x9e, 0x7e, 0x33, 0x0b, 0xaa, 0x53, 0xdf, 0x9b, 0x78, - 0xaa, 0xd3, 0xc8, 0x74, 0x3c, 0x26, 0x84, 0x1b, 0x09, 0x46, 0xb1, 0x33, 0x8e, 0xe4, 0x34, 0x3c, - 0xb4, 0x23, 0x11, 0x28, 0xca, 0x9f, 0x06, 0x9f, 0xc3, 0xd8, 0x47, 0xf0, 0x56, 0x24, 0x26, 0xf2, - 0x99, 0xa0, 0x85, 0x1a, 0xaa, 0xe9, 0x71, 0xcc, 0xd1, 0xb1, 0xb1, 0xf7, 0x4c, 0x50, 0x0e, 0xd5, - 0xf9, 0x8b, 0x09, 0xd6, 0x6d, 0xa8, 0x6a, 0xbb, 0xd1, 0x2d, 0xd8, 0x32, 0x99, 0x42, 0x6d, 0xcc, - 0x90, 0xfe, 0x61, 0x92, 0x21, 0xfd, 0x43, 0xab, 0x0b, 0x55, 0x6d, 0x21, 0xb2, 0x0f, 0x70, 0x56, - 0x86, 0x8d, 0x6d, 0xc4, 0x86, 0x72, 0xa4, 0x74, 0x44, 0x72, 0x6a, 0x93, 0x56, 0x3b, 0xd2, 0xfe, - 0x2f, 0x71, 0x6a, 0x5b, 0x0f, 0xa1, 0x91, 0xae, 0x2c, 0x0d, 0xd1, 0x35, 0x6a, 0x8a, 0xfd, 0x2e, - 0x76, 0x20, 0x77, 0xe9, 0x41, 0xa9, 0x8d, 0x6e, 0x94, 0xa1, 0xf2, 0x64, 0x60, 0xfb, 0xa4, 0xa8, - 0xce, 0xd3, 0x6f, 0xeb, 0x2f, 0x25, 0xa8, 0xd0, 0xc4, 0xd8, 0x06, 0x66, 0x44, 0x38, 0xd5, 0x33, - 0x28, 0xed, 0x32, 0x93, 0x11, 0x40, 0xb9, 0x97, 0x26, 0x04, 0xe6, 0xe1, 0x2a, 0x46, 0xa7, 0x2f, - 0x1c, 0x25, 0x23, 0x33, 0x4e, 0xfa, 0x8d, 0xe3, 0xbb, 0x98, 0xa1, 0x3a, 0x60, 0xa8, 0xcd, 0x6e, - 0x41, 0x55, 0x52, 0x5a, 0x51, 0xcc, 0xbc, 0x20, 0xd9, 0x0c, 0x05, 0x95, 0x47, 0xc2, 0x76, 0x65, - 0xe0, 0xcf, 0x28, 0x92, 0xea, 0x3c, 0xfd, 0xc6, 0x40, 0xa7, 0x3c, 0x3a, 0x9a, 0x85, 0x7a, 0x5b, - 0x6d, 0xe9, 0x40, 0x7f, 0x94, 0x80, 0x3c, 0x93, 0xe3, 0xc6, 0x79, 0x34, 0x09, 0x47, 0xf1, 0x20, - 0x54, 0x9d, 0xab, 0x59, 0x48, 0x26, 0x18, 0x4f, 0xa5, 0xc8, 0x74, 0x6c, 0xe7, 0x44, 0x20, 0xf3, - 0x5a, 0xc6, 0xdc, 0x33, 0x18, 0x4f, 0xa5, 0x59, 0xa6, 0x21, 0xf5, 0x75, 0xa2, 0xe6, 0x32, 0x0d, - 0xb9, 0x99, 0x1c, 0x23, 0x74, 0x38, 0xdc, 0x47, 0xe6, 0x1b, 0xd9, 0xee, 0xae, 0x11, 0x6e, 0x24, - 0x7a, 0xb6, 0xf1, 0xd4, 0x57, 0xfd, 0x6e, 0xe7, 0x4d, 0xed, 0xca, 0xe4, 0x1b, 0xf7, 0x8a, 0xa1, - 0x74, 0x4e, 0x51, 0x81, 0x9b, 0x1d, 0x21, 0x06, 0xe2, 0x89, 0xcc, 0x5a, 0xcb, 0xe6, 0x89, 0xde, - 0x8f, 0xbd, 0x5f, 0xea, 0xb0, 0x2a, 0x71, 0x6a, 0x5b, 0x7d, 0xa8, 0x27, 0x33, 0xb9, 0x10, 0x2d, - 0x77, 0xa0, 0x16, 0x9f, 0xd8, 0x91, 0x17, 0x8c, 0x69, 0x21, 0x5b, 0xdb, 0x57, 0xd3, 0x89, 0x0f, - 0x35, 0x4e, 0x43, 0x19, 0x8e, 0x25, 0x93, 0xc8, 0xbb, 0x4c, 0x57, 0x1b, 0x4a, 0x53, 0xcf, 0x25, - 0x3d, 0x2b, 0x1c, 0x9b, 0x88, 0x8c, 0x3d, 0x1d, 0xbb, 0x2b, 0x1c, 0x9b, 0x68, 0xdf, 0x44, 0xba, - 0xfa, 0x68, 0x5d, 0xe1, 0xd4, 0x9e, 0x8b, 0xce, 0xca, 0x42, 0x74, 0xfa, 0x89, 0x0b, 0xff, 0x2f, - 0xa3, 0xfd, 0x34, 0x75, 0xf8, 0xf7, 0x35, 0x9c, 0xf5, 0xdb, 0x02, 0xd4, 0x93, 0x12, 0x03, 0x0f, - 0x3a, 0xcf, 0x15, 0x81, 0xf2, 0x46, 0x9e, 0x88, 0x8c, 0xf2, 0x1c, 0xc2, 0xee, 0x40, 0xc5, 0x56, - 0x2a, 0x4a, 0x8e, 0x8f, 0x37, 0xf3, 0xf5, 0xc9, 0xd6, 0x0e, 0x4a, 0x7a, 0x81, 0x8a, 0x66, 0x5c, - 0xb3, 0x56, 0x3f, 0x04, 0xc8, 0x40, 0xb4, 0xe7, 0x54, 0xcc, 0x8c, 0x56, 0x6c, 0xb2, 0x6b, 0x50, - 0x79, 0x66, 0xfb, 0xd3, 0x64, 0x2f, 0xd0, 0x1f, 0xf7, 0x8b, 0x1f, 0x16, 0xac, 0x3f, 0x17, 0xa1, - 0x66, 0xea, 0x15, 0x76, 0x1b, 0x6a, 0x54, 0xaf, 0x18, 0x8b, 0x2e, 0x4f, 0xfc, 0x84, 0xc2, 0xee, - 0xa6, 0x85, 0x58, 0xce, 0x46, 0xa3, 0x4a, 0x17, 0x64, 0xc6, 0xc6, 0xac, 0x2c, 0x2b, 0xb9, 0x62, - 0x64, 0x2a, 0xae, 0x16, 0xd5, 0x37, 0x62, 0xe4, 0x05, 0x1e, 0xba, 0x9c, 0xa3, 0x88, 0xdd, 0x4e, - 0x66, 0x5d, 0x26, 0x8d, 0x6f, 0xe4, 0x35, 0x5e, 0x9c, 0x74, 0x1f, 0x9a, 0xb9, 0x61, 0x2e, 0x99, - 0xf5, 0xbb, 0xf9, 0x59, 0x9b, 0x21, 0x49, 0x9d, 0x2e, 0x17, 0x33, 0x2f, 0xfc, 0x0f, 0xfe, 0xfb, - 0x00, 0x20, 0x53, 0xf9, 0xdd, 0x37, 0x4e, 0xeb, 0x4f, 0x25, 0x80, 0x41, 0x88, 0xa7, 0xaf, 0x6b, - 0x53, 0xbd, 0xb0, 0xec, 0x8d, 0x03, 0x19, 0x89, 0xa7, 0xb4, 0xc1, 0x50, 0xff, 0x3a, 0x6f, 0x6a, - 0x8c, 0x92, 0x90, 0xed, 0x40, 0xd3, 0x15, 0xb1, 0x13, 0x79, 0x14, 0xa3, 0xc6, 0xe9, 0x37, 0x70, - 0x4e, 0x99, 0x9e, 0xad, 0x6e, 0xc6, 0xd0, 0xbe, 0xca, 0xf7, 0x61, 0xdb, 0xb0, 0x2c, 0xce, 0x43, - 0x19, 0x29, 0x33, 0x8a, 0x2e, 0x6b, 0xaf, 0xe8, 0x02, 0x19, 0x71, 0x1a, 0x89, 0x37, 0x45, 0xf6, - 0xc1, 0x6c, 0x28, 0x3b, 0x76, 0x18, 0x9b, 0x62, 0xa2, 0xb3, 0x30, 0xde, 0x9e, 0x1d, 0x6a, 0xa7, - 0xed, 0xbe, 0x8f, 0x73, 0xfd, 0xf5, 0xdf, 0x6f, 0xdc, 0xca, 0x55, 0x60, 0x13, 0x79, 0x3c, 0xbb, - 0x4b, 0xf1, 0x72, 0xea, 0xa9, 0xbb, 0x53, 0xe5, 0xf9, 0x77, 0xed, 0xd0, 0x43, 0x75, 0xd8, 0xb1, - 0xdf, 0xe5, 0xa4, 0x9a, 0x7d, 0x08, 0xad, 0x30, 0x92, 0xe3, 0x48, 0xc4, 0xf1, 0x53, 0x3a, 0x8f, - 0x4d, 0x9d, 0xfc, 0x9a, 0xa9, 0x1b, 0x48, 0xf2, 0x31, 0x0a, 0xf8, 0x4a, 0x98, 0xff, 0x5c, 0xfd, - 0x09, 0xb4, 0x17, 0x67, 0xfc, 0x2a, 0xab, 0xb7, 0x7a, 0x0f, 0x1a, 0xe9, 0x0c, 0x5e, 0xd6, 0xb1, - 0x9e, 0x5f, 0xf6, 0x3f, 0x16, 0xa0, 0xaa, 0xf3, 0x91, 0xdd, 0x83, 0x86, 0x2f, 0x1d, 0x1b, 0x0d, - 0x48, 0xee, 0x24, 0x6f, 0x65, 0xe9, 0xba, 0xf5, 0x69, 0x22, 0xd3, 0xeb, 0x91, 0x71, 0x31, 0x3c, - 0xbd, 0x60, 0x24, 0x93, 0xfc, 0x69, 0x65, 0x9d, 0xfa, 0xc1, 0x48, 0x72, 0x2d, 0x5c, 0x7d, 0x08, - 0xad, 0x79, 0x15, 0x97, 0xd8, 0xf9, 0xce, 0x7c, 0xa0, 0xd3, 0x39, 0x94, 0x76, 0xca, 0x9b, 0x7d, - 0x0f, 0x1a, 0x29, 0xce, 0x36, 0x2f, 0x1a, 0xbe, 0x9c, 0xef, 0x99, 0xb3, 0xd5, 0xfa, 0x4d, 0x01, - 0x20, 0xb3, 0x0d, 0xb7, 0x4e, 0xbc, 0xfd, 0x04, 0x59, 0xdd, 0x92, 0x7e, 0xd3, 0xb1, 0x6f, 0x2b, - 0x9b, 0x6c, 0x59, 0xe6, 0xd4, 0x66, 0x5b, 0x00, 0x6e, 0x9a, 0xeb, 0x2f, 0xd8, 0x01, 0x72, 0x0c, - 0xd4, 0xef, 0xdb, 0xc1, 0x78, 0x6a, 0x8f, 0x85, 0x29, 0x2e, 0xd3, 0x6f, 0x6b, 0x00, 0xf5, 0xc4, - 0x42, 0xb6, 0x0e, 0xcd, 0xd8, 0x58, 0x85, 0x05, 0x3c, 0x9a, 0x52, 0xe1, 0x79, 0x08, 0x0b, 0xf1, - 0xc8, 0x0e, 0xc6, 0x62, 0xae, 0x10, 0xe7, 0x88, 0x70, 0x23, 0xb0, 0x3e, 0x83, 0x0a, 0x01, 0x98, - 0xbd, 0xb1, 0xb2, 0x23, 0x65, 0x6a, 0x7a, 0x5d, 0xb6, 0xca, 0x98, 0x4c, 0xda, 0x2d, 0x63, 0x7c, - 0x73, 0x4d, 0x60, 0xef, 0x62, 0x71, 0xec, 0x1a, 0x77, 0x5f, 0xc6, 0x43, 0xb1, 0xf5, 0x11, 0xd4, - 0x13, 0x18, 0xbd, 0xe2, 0x7b, 0x81, 0x30, 0x26, 0x52, 0x1b, 0xef, 0x42, 0xce, 0x89, 0x1d, 0xd9, - 0x8e, 0x12, 0xba, 0x7a, 0xaa, 0xf0, 0x0c, 0xb0, 0xde, 0x81, 0x66, 0x2e, 0x29, 0x31, 0x16, 0x9f, - 0xd0, 0x1a, 0xeb, 0xad, 0x41, 0x7f, 0x58, 0x1f, 0xc3, 0xca, 0x5c, 0x82, 0xe0, 0x69, 0xe5, 0xb9, - 0xc9, 0x69, 0xa5, 0x4f, 0xa2, 0x0b, 0x45, 0x20, 0x83, 0xf2, 0x99, 0xb0, 0x4f, 0x4d, 0x01, 0x48, - 0x6d, 0xeb, 0x0f, 0x78, 0xe5, 0x4b, 0x0a, 0xf3, 0x1f, 0x02, 0x9c, 0x28, 0x15, 0x3e, 0xa5, 0x4a, - 0xdd, 0x28, 0x6b, 0x20, 0x42, 0x0c, 0x76, 0x03, 0x9a, 0xf8, 0x11, 0x1b, 0xb9, 0x56, 0x4d, 0x3d, - 0x62, 0x4d, 0xf8, 0x01, 0x34, 0x46, 0x69, 0xf7, 0x92, 0x89, 0x8f, 0xa4, 0xf7, 0x5b, 0x50, 0x0f, - 0xa4, 0x91, 0xe9, 0xb5, 0xad, 0x05, 0x32, 0xed, 0x67, 0xfb, 0xbe, 0x91, 0x55, 0x74, 0x3f, 0xdb, - 0xf7, 0x49, 0x68, 0xdd, 0x82, 0xd7, 0x2e, 0x5c, 0x5e, 0xd9, 0x1b, 0x50, 0x1d, 0x79, 0xbe, 0xa2, - 0x13, 0x0b, 0x2f, 0x2a, 0xe6, 0xcb, 0xfa, 0x77, 0x01, 0x20, 0x8b, 0x2d, 0x4c, 0x19, 0x3c, 0x7a, - 0x90, 0xb3, 0xac, 0x8f, 0x1a, 0x1f, 0xea, 0x13, 0xb3, 0x89, 0x99, 0xc8, 0xb8, 0x3e, 0x1f, 0x8f, - 0x5b, 0xc9, 0x1e, 0xa7, 0xb7, 0xb7, 0x6d, 0xb3, 0xbd, 0xbd, 0xca, 0x05, 0x33, 0x1d, 0x81, 0xea, - 0xbf, 0xfc, 0x7b, 0x03, 0x64, 0xb9, 0xce, 0x8d, 0x64, 0xf5, 0x21, 0xac, 0xcc, 0x0d, 0xf9, 0x1d, - 0x0f, 0xb4, 0x6c, 0x33, 0xce, 0x27, 0xfa, 0x36, 0x54, 0xf5, 0x43, 0x05, 0xdb, 0x80, 0x9a, 0xed, - 0xe8, 0x1c, 0xcf, 0xed, 0x33, 0x28, 0xdc, 0x21, 0x98, 0x27, 0x62, 0xeb, 0xaf, 0x45, 0x80, 0x0c, - 0x7f, 0x85, 0x4b, 0xc0, 0x7d, 0x68, 0xc5, 0xc2, 0x91, 0x81, 0x6b, 0x47, 0x33, 0x92, 0x9a, 0x9b, - 0xf4, 0x65, 0x5d, 0x16, 0x98, 0xb9, 0x0b, 0x41, 0xe9, 0xe5, 0x17, 0x82, 0x0d, 0x28, 0x3b, 0x32, - 0x9c, 0x99, 0x73, 0x8b, 0xcd, 0x4f, 0x64, 0x4f, 0x86, 0xb3, 0xfd, 0x25, 0x4e, 0x0c, 0xb6, 0x05, - 0xd5, 0xc9, 0x29, 0x3d, 0xdd, 0xe8, 0x2b, 0xe8, 0xb5, 0x79, 0xee, 0xa3, 0x53, 0x6c, 0xef, 0x2f, - 0x71, 0xc3, 0x62, 0xb7, 0xa0, 0x32, 0x39, 0x75, 0xbd, 0xc8, 0x9c, 0x3c, 0x57, 0x17, 0xe9, 0x5d, - 0x2f, 0xa2, 0x97, 0x1a, 0xe4, 0x30, 0x0b, 0x8a, 0xd1, 0xc4, 0xbc, 0xd3, 0xb4, 0x17, 0xbc, 0x39, - 0xd9, 0x5f, 0xe2, 0xc5, 0x68, 0xb2, 0x5b, 0x87, 0xaa, 0xf6, 0xab, 0xf5, 0xaf, 0x12, 0xb4, 0xe6, - 0xad, 0xc4, 0x95, 0x8d, 0x23, 0x27, 0x59, 0xd9, 0x38, 0x72, 0xd2, 0xbb, 0x52, 0x31, 0x77, 0x57, - 0xb2, 0xa0, 0x22, 0xcf, 0x02, 0x11, 0xe5, 0xdf, 0xa8, 0xf6, 0x4e, 0xe4, 0x59, 0x80, 0x85, 0xb8, - 0x16, 0xcd, 0x15, 0x9a, 0x15, 0x53, 0xd7, 0xbe, 0x0b, 0x2b, 0x23, 0xe9, 0xfb, 0xf2, 0x6c, 0x38, - 0x9b, 0xf8, 0x5e, 0x70, 0x6a, 0x8a, 0xdb, 0x79, 0x90, 0x6d, 0xc0, 0x15, 0xd7, 0x8b, 0xd0, 0x9c, - 0x3d, 0x19, 0x28, 0x11, 0xd0, 0x0d, 0x1c, 0x79, 0x8b, 0x30, 0xfb, 0x04, 0xd6, 0x6d, 0xa5, 0xc4, - 0x24, 0x54, 0x8f, 0x83, 0xd0, 0x76, 0x4e, 0xbb, 0xd2, 0xa1, 0x2c, 0x9c, 0x84, 0xb6, 0xf2, 0x8e, - 0x3d, 0xdf, 0x53, 0x33, 0x72, 0x46, 0x9d, 0xbf, 0x94, 0xc7, 0xde, 0x83, 0x96, 0x13, 0x09, 0x5b, - 0x89, 0xae, 0x88, 0xd5, 0xa1, 0xad, 0x4e, 0x3a, 0x75, 0xea, 0xb9, 0x80, 0xe2, 0x1c, 0x6c, 0xb4, - 0xf6, 0x33, 0xcf, 0x77, 0x1d, 0xbc, 0xf5, 0x36, 0xf4, 0x1c, 0xe6, 0x40, 0xb6, 0x05, 0x8c, 0x80, - 0xde, 0x24, 0x54, 0xb3, 0x94, 0x0a, 0x44, 0xbd, 0x44, 0x82, 0x1b, 0xae, 0xf2, 0x26, 0x22, 0x56, - 0xf6, 0x24, 0xa4, 0x0b, 0x7d, 0x89, 0x67, 0x00, 0xbb, 0x09, 0x6d, 0x2f, 0x70, 0xfc, 0xa9, 0x2b, - 0x9e, 0x86, 0x38, 0x91, 0x28, 0x88, 0x3b, 0xcb, 0xb4, 0xab, 0x5c, 0x31, 0xf8, 0xa1, 0x81, 0x91, - 0x2a, 0xce, 0x17, 0xa8, 0x2b, 0x9a, 0x6a, 0xf0, 0x84, 0x6a, 0x7d, 0x5e, 0x80, 0xf6, 0x62, 0xe0, - 0xe1, 0xb2, 0x85, 0x38, 0x79, 0x73, 0xe7, 0xc7, 0x76, 0xba, 0x94, 0xc5, 0xdc, 0x52, 0x26, 0x67, - 0x69, 0x29, 0x77, 0x96, 0xa6, 0x61, 0x51, 0x7e, 0x71, 0x58, 0xcc, 0x4d, 0xb4, 0xb2, 0x30, 0x51, - 0xeb, 0xf7, 0x05, 0xb8, 0xb2, 0x10, 0xdc, 0xdf, 0xd9, 0xa2, 0x75, 0x68, 0x4e, 0xec, 0x53, 0xa1, - 0x5f, 0x4c, 0x62, 0x73, 0x84, 0xe4, 0xa1, 0xef, 0xc1, 0xbe, 0x00, 0x96, 0xf3, 0x19, 0x75, 0xa9, - 0x6d, 0x49, 0x80, 0x1c, 0x48, 0xf5, 0x40, 0x4e, 0xcd, 0x59, 0x9c, 0x04, 0x48, 0x02, 0x5e, 0x0c, - 0xa3, 0xd2, 0x25, 0x61, 0x64, 0x1d, 0x40, 0x3d, 0x31, 0x90, 0xdd, 0x30, 0x4f, 0x5a, 0x85, 0xec, - 0x9a, 0xfd, 0x38, 0x16, 0x11, 0xda, 0xae, 0xdf, 0xb7, 0xde, 0x86, 0x8a, 0xae, 0x51, 0x8b, 0x17, - 0x19, 0x5a, 0x62, 0x0d, 0xa1, 0x66, 0x10, 0xb6, 0x09, 0xd5, 0xe3, 0x59, 0xfa, 0xbc, 0x63, 0xb6, - 0x0b, 0xfc, 0x76, 0x0d, 0x03, 0xf7, 0x20, 0xcd, 0x60, 0xd7, 0xa0, 0x7c, 0x3c, 0xeb, 0x77, 0xf5, - 0xcd, 0x12, 0x77, 0x32, 0xfc, 0xda, 0xad, 0x6a, 0x83, 0xac, 0x4f, 0x61, 0x39, 0xdf, 0x2f, 0x3d, - 0xd8, 0x0b, 0xb9, 0x83, 0x3d, 0xdd, 0xb2, 0x8b, 0x2f, 0xbb, 0x7e, 0x7c, 0x00, 0x40, 0x0f, 0xd0, - 0xaf, 0x7a, 0x6d, 0xf9, 0x31, 0xd4, 0xcc, 0xc3, 0x35, 0x7b, 0x6f, 0xe1, 0x21, 0xbe, 0x95, 0xbe, - 0x6a, 0xcf, 0xbd, 0xc6, 0x5b, 0xf7, 0xb1, 0x80, 0x3d, 0x13, 0x51, 0xd7, 0x1b, 0x8d, 0x5e, 0x75, - 0xb8, 0xfb, 0xd0, 0x7a, 0x1c, 0x86, 0xff, 0x5d, 0xdf, 0x5f, 0x40, 0x55, 0xbf, 0x9f, 0x63, 0x1f, - 0x1f, 0x2d, 0x30, 0x6b, 0xc0, 0x74, 0x91, 0x9b, 0x37, 0x89, 0x6b, 0x02, 0x32, 0xa7, 0x38, 0x9e, - 0x59, 0x5c, 0x62, 0xce, 0x1b, 0xc0, 0x35, 0x61, 0x73, 0x03, 0x6a, 0xe6, 0xa9, 0x96, 0x35, 0xa0, - 0xf2, 0xf8, 0x60, 0xd8, 0x3b, 0x6a, 0x2f, 0xb1, 0x3a, 0x94, 0xf7, 0x07, 0xc3, 0xa3, 0x76, 0x01, - 0x5b, 0x07, 0x83, 0x83, 0x5e, 0xbb, 0xb8, 0x79, 0x13, 0x96, 0xf3, 0x8f, 0xb5, 0xac, 0x09, 0xb5, - 0xe1, 0xce, 0x41, 0x77, 0x77, 0xf0, 0xb3, 0xf6, 0x12, 0x5b, 0x86, 0x7a, 0xff, 0x60, 0xd8, 0xdb, - 0x7b, 0xcc, 0x7b, 0xed, 0xc2, 0xe6, 0xcf, 0xa1, 0x91, 0xbe, 0x5f, 0xa1, 0x86, 0xdd, 0xfe, 0x41, - 0xb7, 0xbd, 0xc4, 0x00, 0xaa, 0xc3, 0xde, 0x1e, 0xef, 0xa1, 0xde, 0x1a, 0x94, 0x86, 0xc3, 0xfd, - 0x76, 0x11, 0x47, 0xdd, 0xdb, 0xd9, 0xdb, 0xef, 0xb5, 0x4b, 0xd8, 0x3c, 0x7a, 0x74, 0xf8, 0x60, - 0xd8, 0x2e, 0xb3, 0x15, 0x68, 0xa0, 0x01, 0x4f, 0xa9, 0xa7, 0x4b, 0x3d, 0x07, 0x7b, 0x0f, 0x7b, - 0x47, 0x6d, 0xb1, 0xf9, 0x01, 0x5c, 0x59, 0x78, 0xcd, 0x21, 0xf1, 0xfe, 0x0e, 0xef, 0xe1, 0x20, - 0x4d, 0xa8, 0x1d, 0xf2, 0xfe, 0x93, 0x9d, 0xa3, 0x5e, 0xbb, 0x80, 0x82, 0x4f, 0xb1, 0x5f, 0xb7, - 0x5d, 0xdc, 0xbd, 0xfe, 0xc5, 0xf3, 0xb5, 0xc2, 0x57, 0xcf, 0xd7, 0x0a, 0x5f, 0x3f, 0x5f, 0x2b, - 0xfc, 0xe3, 0xf9, 0x5a, 0xe1, 0xf3, 0x6f, 0xd7, 0x96, 0xbe, 0xfa, 0x76, 0x6d, 0xe9, 0xeb, 0x6f, - 0xd7, 0x96, 0x8e, 0xab, 0xf4, 0xe7, 0xcc, 0xfb, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x1b, 0xb4, - 0x2a, 0x76, 0xdc, 0x19, 0x00, 0x00, -======= - // 2627 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcf, 0x6f, 0x5b, 0xc7, - 0xf1, 0x17, 0x7f, 0x93, 0x43, 0x8a, 0x66, 0xd6, 0x4e, 0xc2, 0xe8, 0xeb, 0xaf, 0xac, 0xbc, 0xe4, - 0x1b, 0xc8, 0xb2, 0x2d, 0x21, 0x0a, 0x10, 0xe7, 0x6b, 0x04, 0x45, 0x25, 0x91, 0x8a, 0x18, 0xdb, - 0xa2, 0xb0, 0xb4, 0x9c, 0x1e, 0x0a, 0x18, 0x4f, 0x8f, 0x4b, 0xea, 0x41, 0x8f, 0xef, 0x3d, 0xec, - 0x5b, 0x5a, 0x62, 0x0f, 0x3d, 0xf4, 0xd4, 0x63, 0x80, 0x02, 0xbd, 0x15, 0xfd, 0x27, 0x7a, 0x6c, - 0xef, 0x01, 0x72, 0x09, 0xd0, 0x1e, 0x82, 0x1e, 0xd2, 0xc2, 0xb9, 0xf4, 0x8f, 0x68, 0x81, 0x62, - 0x66, 0xf7, 0xfd, 0x20, 0x25, 0xc3, 0x71, 0x5b, 0xf4, 0xc4, 0xd9, 0x99, 0xcf, 0xce, 0xce, 0xcc, - 0xce, 0xec, 0xce, 0x5b, 0x42, 0x2d, 0x08, 0xa3, 0xcd, 0x50, 0x06, 0x2a, 0x60, 0xf9, 0xf0, 0x64, - 0xe5, 0xde, 0xd8, 0x55, 0xa7, 0xd3, 0x93, 0x4d, 0x27, 0x98, 0x6c, 0x8d, 0x83, 0x71, 0xb0, 0x45, - 0xa2, 0x93, 0xe9, 0x88, 0x46, 0x34, 0x20, 0x4a, 0x4f, 0xb1, 0xfe, 0x96, 0x87, 0x7c, 0x3f, 0x64, - 0xef, 0x42, 0xd9, 0xf5, 0xc3, 0xa9, 0x8a, 0xda, 0xb9, 0xb5, 0xc2, 0x7a, 0x7d, 0xbb, 0xb6, 0x19, - 0x9e, 0x6c, 0xf6, 0x90, 0xc3, 0x8d, 0x80, 0xad, 0x41, 0x51, 0x5c, 0x08, 0xa7, 0x9d, 0x5f, 0xcb, - 0xad, 0xd7, 0xb7, 0x01, 0x01, 0xdd, 0x0b, 0xe1, 0xf4, 0xc3, 0x83, 0x25, 0x4e, 0x12, 0xf6, 0x01, - 0x94, 0xa3, 0x60, 0x2a, 0x1d, 0xd1, 0x2e, 0x10, 0xa6, 0x81, 0x98, 0x01, 0x71, 0x08, 0x65, 0xa4, - 0xa8, 0x69, 0xe4, 0x7a, 0xa2, 0x5d, 0x4c, 0x35, 0xed, 0xbb, 0x9e, 0xc6, 0x90, 0x84, 0xbd, 0x07, - 0xa5, 0x93, 0xa9, 0xeb, 0x0d, 0xdb, 0x25, 0x82, 0xd4, 0x11, 0xb2, 0x8b, 0x0c, 0xc2, 0x68, 0x19, - 0x82, 0x26, 0x42, 0x8e, 0x45, 0xbb, 0x9c, 0x82, 0x1e, 0x23, 0x43, 0x83, 0x48, 0x86, 0x6b, 0x0d, - 0xdd, 0xd1, 0xa8, 0x5d, 0x49, 0xd7, 0xea, 0xb8, 0xa3, 0x91, 0x5e, 0x0b, 0x25, 0x6c, 0x1d, 0xaa, - 0xa1, 0x67, 0xab, 0x51, 0x20, 0x27, 0x6d, 0x48, 0xed, 0x3e, 0x32, 0x3c, 0x9e, 0x48, 0xd9, 0x7d, - 0xa8, 0x3b, 0x81, 0x1f, 0x29, 0x69, 0xbb, 0xbe, 0x8a, 0xda, 0x75, 0x02, 0xbf, 0x89, 0xe0, 0x2f, - 0x02, 0x79, 0x26, 0xe4, 0x5e, 0x2a, 0xe4, 0x59, 0xe4, 0x6e, 0x11, 0xf2, 0x41, 0x68, 0xfd, 0x3a, - 0x07, 0xd5, 0x58, 0x2b, 0xb3, 0xa0, 0xb1, 0x23, 0x9d, 0x53, 0x57, 0x09, 0x47, 0x4d, 0xa5, 0x68, - 0xe7, 0xd6, 0x72, 0xeb, 0x35, 0x3e, 0xc7, 0x63, 0x4d, 0xc8, 0xf7, 0x07, 0x14, 0xef, 0x1a, 0xcf, - 0xf7, 0x07, 0xac, 0x0d, 0x95, 0xa7, 0xb6, 0x74, 0x6d, 0x5f, 0x51, 0x80, 0x6b, 0x3c, 0x1e, 0xb2, - 0x9b, 0x50, 0xeb, 0x0f, 0x9e, 0x0a, 0x19, 0xb9, 0x81, 0x4f, 0x61, 0xad, 0xf1, 0x94, 0xc1, 0x56, - 0x01, 0xfa, 0x83, 0x7d, 0x61, 0xa3, 0xd2, 0xa8, 0x5d, 0x5a, 0x2b, 0xac, 0xd7, 0x78, 0x86, 0x63, - 0xfd, 0x1c, 0x4a, 0xb4, 0xd5, 0xec, 0x73, 0x28, 0x0f, 0xdd, 0xb1, 0x88, 0x94, 0x36, 0x67, 0x77, - 0xfb, 0xab, 0xef, 0x6e, 0x2d, 0xfd, 0xf9, 0xbb, 0x5b, 0x1b, 0x99, 0x9c, 0x0a, 0x42, 0xe1, 0x3b, - 0x81, 0xaf, 0x6c, 0xd7, 0x17, 0x32, 0xda, 0x1a, 0x07, 0xf7, 0xf4, 0x94, 0xcd, 0x0e, 0xfd, 0x70, - 0xa3, 0x81, 0xdd, 0x86, 0x92, 0xeb, 0x0f, 0xc5, 0x05, 0xd9, 0x5f, 0xd8, 0xbd, 0x6e, 0x54, 0xd5, - 0xfb, 0x53, 0x15, 0x4e, 0x55, 0x0f, 0x45, 0x5c, 0x23, 0xac, 0xaf, 0x73, 0x50, 0xd6, 0xa9, 0xc4, - 0x6e, 0x42, 0x71, 0x22, 0x94, 0x4d, 0xeb, 0xd7, 0xb7, 0xab, 0x7a, 0x4b, 0x95, 0xcd, 0x89, 0x8b, - 0x59, 0x3a, 0x09, 0xa6, 0x18, 0xfb, 0x7c, 0x9a, 0xa5, 0x8f, 0x91, 0xc3, 0x8d, 0x80, 0xfd, 0x1f, - 0x54, 0x7c, 0xa1, 0xce, 0x03, 0x79, 0x46, 0x31, 0x6a, 0xea, 0xb4, 0x38, 0x14, 0xea, 0x71, 0x30, - 0x14, 0x3c, 0x96, 0xb1, 0xbb, 0x50, 0x8d, 0x84, 0x33, 0x95, 0xae, 0x9a, 0x51, 0xbc, 0x9a, 0xdb, - 0x2d, 0x4a, 0x56, 0xc3, 0x23, 0x70, 0x82, 0x60, 0x77, 0xa0, 0x16, 0x09, 0x47, 0x0a, 0x25, 0xfc, - 0xe7, 0x14, 0xbf, 0xfa, 0xf6, 0xb2, 0x81, 0x4b, 0xa1, 0xba, 0xfe, 0x73, 0x9e, 0xca, 0xad, 0xaf, - 0xf3, 0x50, 0x44, 0x9b, 0x19, 0x83, 0xa2, 0x2d, 0xc7, 0xba, 0xa2, 0x6a, 0x9c, 0x68, 0xd6, 0x82, - 0x02, 0xea, 0xc8, 0x13, 0x0b, 0x49, 0xe4, 0x38, 0xe7, 0x43, 0xb3, 0xa1, 0x48, 0xe2, 0xbc, 0x69, - 0x24, 0xa4, 0xd9, 0x47, 0xa2, 0xd9, 0x6d, 0xa8, 0x85, 0x32, 0xb8, 0x98, 0x3d, 0xd3, 0x16, 0xa4, - 0x59, 0x8a, 0x4c, 0x34, 0xa0, 0x1a, 0x1a, 0x8a, 0x6d, 0x00, 0x88, 0x0b, 0x25, 0xed, 0x83, 0x20, - 0x52, 0x51, 0xbb, 0x4c, 0xd6, 0x52, 0xde, 0x23, 0xa3, 0x77, 0xc4, 0x33, 0x52, 0xb6, 0x02, 0xd5, - 0xd3, 0x20, 0x52, 0xbe, 0x3d, 0x11, 0x54, 0x21, 0x35, 0x9e, 0x8c, 0x99, 0x05, 0xe5, 0xa9, 0xe7, - 0x4e, 0x5c, 0xd5, 0xae, 0xa5, 0x3a, 0x8e, 0x89, 0xc3, 0x8d, 0x04, 0xb3, 0xd8, 0x19, 0xcb, 0x60, - 0x1a, 0x1e, 0xd9, 0x52, 0xf8, 0x8a, 0xea, 0xa7, 0xc6, 0xe7, 0x78, 0xec, 0x53, 0x78, 0x47, 0x8a, - 0x49, 0xf0, 0x5c, 0xd0, 0x46, 0x0d, 0xd4, 0xf4, 0x24, 0xe2, 0x18, 0xd8, 0xc8, 0x7d, 0x2e, 0xa8, - 0x86, 0xaa, 0xfc, 0xe5, 0x00, 0xeb, 0x2e, 0x94, 0xb5, 0xdd, 0x18, 0x16, 0xa4, 0x4c, 0xa5, 0x10, - 0x8d, 0x15, 0xd2, 0x3b, 0x8a, 0x2b, 0xa4, 0x77, 0x64, 0x75, 0xa0, 0xac, 0x2d, 0x44, 0xf4, 0x21, - 0x7a, 0x65, 0xd0, 0x48, 0x23, 0x6f, 0x10, 0x8c, 0x94, 0xce, 0x48, 0x4e, 0x34, 0x69, 0xb5, 0xa5, - 0x8e, 0x7f, 0x81, 0x13, 0x6d, 0x3d, 0x84, 0x5a, 0xb2, 0xb3, 0xb4, 0x44, 0xc7, 0xa8, 0xc9, 0xf7, - 0x3a, 0x38, 0x81, 0xc2, 0xa5, 0x17, 0x25, 0x1a, 0xc3, 0x18, 0x84, 0xca, 0x0d, 0x7c, 0xdb, 0x23, - 0x45, 0x55, 0x9e, 0x8c, 0xad, 0x3f, 0x16, 0xa0, 0x44, 0x8e, 0xb1, 0x75, 0xac, 0x88, 0x70, 0xaa, - 0x3d, 0x28, 0xec, 0x32, 0x53, 0x11, 0x40, 0xb5, 0x97, 0x14, 0x04, 0xd6, 0xe1, 0x0a, 0x66, 0xa7, - 0x27, 0x1c, 0x15, 0x48, 0xb3, 0x4e, 0x32, 0xc6, 0xf5, 0x87, 0x58, 0xa1, 0x3a, 0x61, 0x88, 0x66, - 0x77, 0xa0, 0x1c, 0x50, 0x59, 0x51, 0xce, 0xbc, 0xa4, 0xd8, 0x0c, 0x04, 0x95, 0x4b, 0x61, 0x0f, - 0x03, 0xdf, 0x9b, 0x51, 0x26, 0x55, 0x79, 0x32, 0xc6, 0x44, 0xa7, 0x3a, 0x7a, 0x32, 0x0b, 0xf5, - 0xb1, 0xda, 0xd4, 0x89, 0xfe, 0x38, 0x66, 0xf2, 0x54, 0x8e, 0x07, 0xe7, 0x93, 0x49, 0x38, 0x8a, - 0xfa, 0xa1, 0x6a, 0x5f, 0x4f, 0x53, 0x32, 0xe6, 0xf1, 0x44, 0x8a, 0x48, 0xc7, 0x76, 0x4e, 0x05, - 0x22, 0x6f, 0xa4, 0xc8, 0x3d, 0xc3, 0xe3, 0x89, 0x34, 0xad, 0x34, 0x84, 0xbe, 0x49, 0xd0, 0x4c, - 0xa5, 0x21, 0x36, 0x95, 0x63, 0x86, 0x0e, 0x06, 0x07, 0x88, 0x7c, 0x2b, 0x3d, 0xdd, 0x35, 0x87, - 0x1b, 0x89, 0xf6, 0x36, 0x9a, 0x7a, 0xaa, 0xd7, 0x69, 0xbf, 0xad, 0x43, 0x19, 0x8f, 0xd9, 0xff, - 0x43, 0x03, 0x4f, 0x32, 0xe1, 0x2b, 0xb2, 0xa4, 0xdd, 0x26, 0x87, 0xdf, 0x4c, 0x1c, 0xde, 0xcb, - 0x08, 0xf9, 0x1c, 0xd4, 0x5a, 0x4d, 0x7d, 0xc7, 0x1d, 0x89, 0xdc, 0x9f, 0xe9, 0x54, 0x2b, 0x70, - 0xa2, 0xad, 0x1e, 0x54, 0x63, 0xef, 0x2e, 0x65, 0xd0, 0x3d, 0xa8, 0x44, 0xa7, 0xb6, 0x74, 0xfd, - 0x31, 0x6d, 0x6e, 0x73, 0xfb, 0x7a, 0x12, 0x8c, 0x81, 0xe6, 0xa3, 0x03, 0x31, 0xc6, 0x0a, 0xe2, - 0x6c, 0xbc, 0x4a, 0x57, 0x0b, 0x0a, 0x53, 0x77, 0x48, 0x7a, 0x96, 0x39, 0x92, 0xc8, 0x19, 0xbb, - 0x3a, 0x9f, 0x97, 0x39, 0x92, 0x68, 0xdf, 0x24, 0x18, 0xea, 0xeb, 0x76, 0x99, 0x13, 0x3d, 0x97, - 0xb1, 0xa5, 0x85, 0x8c, 0xf5, 0xe2, 0xb0, 0xfe, 0x57, 0x56, 0xfb, 0x55, 0x0e, 0xaa, 0x71, 0x8f, - 0x80, 0x37, 0x95, 0x3b, 0x14, 0xbe, 0x72, 0x47, 0xae, 0x90, 0x66, 0xe1, 0x0c, 0x87, 0xdd, 0x83, - 0x92, 0xad, 0x94, 0x8c, 0xcf, 0xff, 0xb7, 0xb3, 0x0d, 0xc6, 0xe6, 0x0e, 0x4a, 0xba, 0xbe, 0x92, - 0x33, 0xae, 0x51, 0x2b, 0x9f, 0x00, 0xa4, 0x4c, 0xb4, 0xf5, 0x4c, 0xcc, 0x8c, 0x56, 0x24, 0xd9, - 0x0d, 0x28, 0x3d, 0xb7, 0xbd, 0x69, 0x5c, 0xcc, 0x7a, 0xf0, 0x20, 0xff, 0x49, 0xce, 0xfa, 0x43, - 0x1e, 0x2a, 0xa6, 0xe1, 0x60, 0x77, 0xa1, 0x42, 0x0d, 0x87, 0xb1, 0xe8, 0xea, 0xca, 0x8d, 0x21, - 0x6c, 0x2b, 0xe9, 0xa4, 0x32, 0x36, 0x1a, 0x55, 0xba, 0xa3, 0x32, 0x36, 0xa6, 0x7d, 0x55, 0x61, - 0x28, 0x46, 0xa6, 0x65, 0x6a, 0x52, 0x83, 0x22, 0x46, 0xae, 0xef, 0x62, 0x7c, 0x38, 0x8a, 0xd8, - 0xdd, 0xd8, 0xeb, 0x22, 0x69, 0x7c, 0x2b, 0xab, 0xf1, 0xb2, 0xd3, 0x3d, 0xa8, 0x67, 0x96, 0xb9, - 0xc2, 0xeb, 0xf7, 0xb3, 0x5e, 0x9b, 0x25, 0x49, 0x9d, 0xee, 0xf7, 0xd2, 0x28, 0xfc, 0x1b, 0xf1, - 0xfb, 0x18, 0x20, 0x55, 0xf9, 0xc3, 0x4f, 0x3e, 0xeb, 0xf7, 0x05, 0x80, 0x7e, 0x88, 0xd7, 0xe7, - 0xd0, 0xa6, 0x0b, 0xbf, 0xe1, 0x8e, 0xfd, 0x40, 0x8a, 0x67, 0x74, 0x42, 0xd0, 0xfc, 0x2a, 0xaf, - 0x6b, 0x1e, 0x55, 0x0c, 0xdb, 0x81, 0xfa, 0x50, 0x44, 0x8e, 0x74, 0x29, 0xa1, 0x4c, 0xd0, 0x6f, - 0xa1, 0x4f, 0xa9, 0x9e, 0xcd, 0x4e, 0x8a, 0xd0, 0xb1, 0xca, 0xce, 0x61, 0xdb, 0xd0, 0x10, 0x17, - 0x61, 0x20, 0x95, 0x59, 0x45, 0xf7, 0xa5, 0xd7, 0x74, 0x87, 0x8b, 0x7c, 0x7d, 0x02, 0xd4, 0x45, - 0x3a, 0x60, 0x36, 0x14, 0x1d, 0x3b, 0x8c, 0x4c, 0x37, 0xd0, 0x5e, 0x58, 0x6f, 0xcf, 0x0e, 0x75, - 0xd0, 0x76, 0x3f, 0x42, 0x5f, 0x7f, 0xf1, 0x97, 0x5b, 0x77, 0x32, 0x2d, 0xd4, 0x24, 0x38, 0x99, - 0x6d, 0x51, 0xbe, 0x9c, 0xb9, 0x6a, 0x6b, 0xaa, 0x5c, 0x6f, 0xcb, 0x0e, 0x5d, 0x54, 0x87, 0x13, - 0x7b, 0x1d, 0x4e, 0xaa, 0xd9, 0x27, 0xd0, 0x0c, 0x65, 0x30, 0x96, 0x22, 0x8a, 0x9e, 0xd1, 0x85, - 0x6a, 0x1a, 0xdd, 0x37, 0xcc, 0xc5, 0x4f, 0x92, 0xcf, 0x50, 0xc0, 0x97, 0xc3, 0xec, 0x70, 0xe5, - 0x47, 0xd0, 0x5a, 0xf4, 0xf8, 0x75, 0x76, 0x6f, 0xe5, 0x3e, 0xd4, 0x12, 0x0f, 0x5e, 0x35, 0xb1, - 0x9a, 0xdd, 0xf6, 0xdf, 0xe5, 0xa0, 0xac, 0xeb, 0x91, 0xdd, 0x87, 0x9a, 0x17, 0x38, 0x36, 0x1a, - 0x10, 0x7f, 0x54, 0xbc, 0x93, 0x96, 0xeb, 0xe6, 0xa3, 0x58, 0xa6, 0xf7, 0x23, 0xc5, 0x62, 0x7a, - 0xba, 0xfe, 0x28, 0x88, 0xeb, 0xa7, 0x99, 0x4e, 0xea, 0xf9, 0xa3, 0x80, 0x6b, 0xe1, 0xca, 0x43, - 0x68, 0xce, 0xab, 0xb8, 0xc2, 0xce, 0xf7, 0xe6, 0x13, 0x9d, 0x2e, 0x92, 0x64, 0x52, 0xd6, 0xec, - 0xfb, 0x50, 0x4b, 0xf8, 0x6c, 0xe3, 0xb2, 0xe1, 0x8d, 0xec, 0xcc, 0x8c, 0xad, 0xd6, 0x2f, 0x73, - 0x00, 0xa9, 0x6d, 0x78, 0xce, 0xe1, 0xe7, 0x8b, 0x9f, 0x36, 0x1e, 0xc9, 0x98, 0xee, 0x6d, 0x5b, - 0xd9, 0x64, 0x4b, 0x83, 0x13, 0xcd, 0x36, 0x01, 0x86, 0x49, 0xad, 0xbf, 0xe4, 0x04, 0xc8, 0x20, - 0x50, 0xbf, 0x67, 0xfb, 0xe3, 0xa9, 0x3d, 0x16, 0xa6, 0x3b, 0x4c, 0xc6, 0x56, 0x1f, 0xaa, 0xb1, - 0x85, 0x6c, 0x0d, 0xea, 0x91, 0xb1, 0x0a, 0x3b, 0x70, 0x34, 0xa5, 0xc4, 0xb3, 0x2c, 0xec, 0xa4, - 0xa5, 0xed, 0x8f, 0xc5, 0x5c, 0x27, 0xcd, 0x91, 0xc3, 0x8d, 0xc0, 0xfa, 0x02, 0x4a, 0xc4, 0xc0, - 0xea, 0x8d, 0x94, 0x2d, 0x95, 0x69, 0xca, 0x75, 0xdf, 0x19, 0x44, 0x64, 0xd2, 0x6e, 0x11, 0xf3, - 0x9b, 0x6b, 0x00, 0x7b, 0x1f, 0xbb, 0xdb, 0xa1, 0x09, 0xf7, 0x55, 0x38, 0x14, 0x5b, 0x9f, 0x42, - 0x35, 0x66, 0x63, 0x54, 0x3c, 0xd7, 0x17, 0xc6, 0x44, 0xa2, 0xf1, 0x63, 0xc6, 0x39, 0xb5, 0xa5, - 0xed, 0x28, 0xa1, 0xdb, 0x9f, 0x12, 0x4f, 0x19, 0xd6, 0x7b, 0x50, 0xcf, 0x14, 0x25, 0xe6, 0xe2, - 0x53, 0xda, 0x63, 0x7d, 0x34, 0xe8, 0x81, 0xf5, 0x19, 0x2c, 0xcf, 0x15, 0x08, 0xde, 0x64, 0xee, - 0x30, 0xbe, 0xc9, 0xf4, 0x2d, 0x75, 0xa9, 0x8b, 0x63, 0x50, 0x3c, 0x17, 0xf6, 0x99, 0xe9, 0xe0, - 0x88, 0xb6, 0x7e, 0x8b, 0xdf, 0x6c, 0x71, 0x67, 0xfd, 0xbf, 0x00, 0xa7, 0x4a, 0x85, 0xcf, 0xa8, - 0xd5, 0x36, 0xca, 0x6a, 0xc8, 0x21, 0x04, 0xbb, 0x05, 0x75, 0x1c, 0x44, 0x46, 0xae, 0x55, 0xd3, - 0x8c, 0x48, 0x03, 0xfe, 0x07, 0x6a, 0xa3, 0x64, 0x7a, 0xc1, 0xe4, 0x47, 0x3c, 0xfb, 0x1d, 0xa8, - 0xfa, 0x81, 0x91, 0xe9, 0xbd, 0xad, 0xf8, 0x41, 0x32, 0xcf, 0xf6, 0x3c, 0x23, 0x2b, 0xe9, 0x79, - 0xb6, 0xe7, 0x91, 0xd0, 0xba, 0x03, 0x6f, 0x5c, 0xfa, 0xfa, 0x64, 0x6f, 0x41, 0x79, 0xe4, 0x7a, - 0x8a, 0x6e, 0x2c, 0xfc, 0xd2, 0x30, 0x23, 0xeb, 0x1f, 0x39, 0x80, 0x34, 0xb7, 0xb0, 0x64, 0xf0, - 0xea, 0x41, 0x4c, 0x43, 0x5f, 0x35, 0x1e, 0x54, 0x27, 0xe6, 0x10, 0x33, 0x99, 0x71, 0x73, 0x3e, - 0x1f, 0x37, 0xe3, 0x33, 0x4e, 0x1f, 0x6f, 0xdb, 0xe6, 0x78, 0x7b, 0x9d, 0x2f, 0xc4, 0x64, 0x05, - 0x6a, 0xe0, 0xb2, 0x0f, 0x06, 0x90, 0xd6, 0x3a, 0x37, 0x92, 0x95, 0x87, 0xb0, 0x3c, 0xb7, 0xe4, - 0x0f, 0xbc, 0xd0, 0xd2, 0xc3, 0x38, 0x5b, 0xe8, 0xdb, 0x50, 0xd6, 0x2f, 0x0d, 0x6c, 0x1d, 0x2a, - 0xb6, 0xa3, 0x6b, 0x3c, 0x73, 0xce, 0xa0, 0x70, 0x87, 0xd8, 0x3c, 0x16, 0x5b, 0x7f, 0xca, 0x03, - 0xa4, 0xfc, 0xd7, 0xe8, 0xe2, 0x1f, 0x40, 0x33, 0x12, 0x4e, 0xe0, 0x0f, 0x6d, 0x39, 0x23, 0xa9, - 0xf9, 0x14, 0xbe, 0x6a, 0xca, 0x02, 0x32, 0xd3, 0xd1, 0x17, 0x5e, 0xdd, 0xd1, 0xaf, 0x43, 0xd1, - 0x09, 0xc2, 0x99, 0xb9, 0xb7, 0xd8, 0xbc, 0x23, 0x7b, 0x41, 0x38, 0x3b, 0x58, 0xe2, 0x84, 0x60, - 0x9b, 0x50, 0x9e, 0x9c, 0xd1, 0xdb, 0x8b, 0xfe, 0x86, 0xbc, 0x31, 0x8f, 0x7d, 0x7c, 0x86, 0xf4, - 0xc1, 0x12, 0x37, 0x28, 0x76, 0x07, 0x4a, 0x93, 0xb3, 0xa1, 0x2b, 0xcd, 0xcd, 0x73, 0x7d, 0x11, - 0xde, 0x71, 0x25, 0x3d, 0xb5, 0x20, 0x86, 0x59, 0x90, 0x97, 0x13, 0xf3, 0xd0, 0xd2, 0x5a, 0x88, - 0xe6, 0xe4, 0x60, 0x89, 0xe7, 0xe5, 0x64, 0xb7, 0x0a, 0x65, 0x1d, 0x57, 0xeb, 0xef, 0x05, 0x68, - 0xce, 0x5b, 0x89, 0x3b, 0x1b, 0x49, 0x27, 0xde, 0xd9, 0x48, 0x3a, 0xc9, 0xc7, 0x4e, 0x3e, 0xf3, - 0xb1, 0x63, 0x41, 0x29, 0x38, 0xf7, 0x85, 0xcc, 0x3e, 0x32, 0xed, 0x9d, 0x06, 0xe7, 0x3e, 0x76, - 0xcd, 0x5a, 0x34, 0xd7, 0x84, 0x96, 0x4c, 0x13, 0xfa, 0x3e, 0x2c, 0x8f, 0x02, 0xcf, 0x0b, 0xce, - 0x07, 0xb3, 0x89, 0xe7, 0xfa, 0x67, 0xa6, 0x13, 0x9d, 0x67, 0xb2, 0x75, 0xb8, 0x36, 0x74, 0x25, - 0x9a, 0x63, 0xba, 0xff, 0x88, 0x7c, 0xaf, 0xf2, 0x45, 0x36, 0xfb, 0x1c, 0xd6, 0x6c, 0xa5, 0xc4, - 0x24, 0x54, 0xc7, 0x7e, 0x68, 0x3b, 0x67, 0x9d, 0xc0, 0xa1, 0x2a, 0x9c, 0x84, 0xb6, 0x72, 0x4f, - 0x5c, 0xcf, 0x55, 0x33, 0x0a, 0x46, 0x95, 0xbf, 0x12, 0xc7, 0x3e, 0x80, 0xa6, 0x23, 0x85, 0xad, - 0x44, 0x47, 0x44, 0xea, 0xc8, 0x56, 0xa7, 0xed, 0x2a, 0xcd, 0x5c, 0xe0, 0xa2, 0x0f, 0x36, 0x5a, - 0xfb, 0x85, 0xeb, 0x0d, 0x1d, 0xfc, 0x6c, 0xad, 0x69, 0x1f, 0xe6, 0x98, 0x6c, 0x13, 0x18, 0x31, - 0xba, 0x93, 0x50, 0xcd, 0x12, 0x28, 0x10, 0xf4, 0x0a, 0x09, 0x1e, 0xb8, 0xca, 0x9d, 0x88, 0x48, - 0xd9, 0x93, 0x90, 0xbe, 0xc8, 0x0b, 0x3c, 0x65, 0xb0, 0xdb, 0xd0, 0x72, 0x7d, 0xc7, 0x9b, 0x0e, - 0xc5, 0xb3, 0x10, 0x1d, 0x91, 0x7e, 0xd4, 0x6e, 0xd0, 0xa9, 0x72, 0xcd, 0xf0, 0x8f, 0x0c, 0x1b, - 0xa1, 0xe2, 0x62, 0x01, 0xba, 0xac, 0xa1, 0x86, 0x1f, 0x43, 0xad, 0x2f, 0x73, 0xd0, 0x5a, 0x4c, - 0x3c, 0xdc, 0xb6, 0x10, 0x9d, 0x37, 0x1f, 0xed, 0x48, 0x27, 0x5b, 0x99, 0xcf, 0x6c, 0x65, 0x7c, - 0x97, 0x16, 0x32, 0x77, 0x69, 0x92, 0x16, 0xc5, 0x97, 0xa7, 0xc5, 0x9c, 0xa3, 0xa5, 0x05, 0x47, - 0xad, 0xdf, 0xe4, 0xe0, 0xda, 0x42, 0x72, 0xff, 0x60, 0x8b, 0xd6, 0xa0, 0x3e, 0xb1, 0xcf, 0x84, - 0x7e, 0xf2, 0x88, 0xcc, 0x15, 0x92, 0x65, 0xfd, 0x07, 0xec, 0xf3, 0xa1, 0x91, 0xad, 0xa8, 0x2b, - 0x6d, 0x8b, 0x13, 0xe4, 0x30, 0x50, 0xfb, 0xc1, 0xd4, 0xdc, 0xc5, 0x71, 0x82, 0xc4, 0xcc, 0xcb, - 0x69, 0x54, 0xb8, 0x22, 0x8d, 0xac, 0x43, 0xa8, 0xc6, 0x06, 0xb2, 0x5b, 0xe6, 0x4d, 0x2a, 0x97, - 0x3e, 0xb5, 0x1e, 0x47, 0x42, 0xa2, 0xed, 0xfa, 0x81, 0xea, 0x5d, 0x28, 0xe9, 0x1e, 0x35, 0x7f, - 0x19, 0xa1, 0x25, 0xd6, 0x00, 0x2a, 0x86, 0xc3, 0x36, 0xa0, 0x7c, 0x32, 0x4b, 0xde, 0x67, 0xcc, - 0x71, 0x81, 0xe3, 0xa1, 0x41, 0xe0, 0x19, 0xa4, 0x11, 0xec, 0x06, 0x14, 0x4f, 0x66, 0xbd, 0x8e, - 0xfe, 0xea, 0xc4, 0x93, 0x0c, 0x47, 0xbb, 0x65, 0x6d, 0x90, 0xf5, 0x08, 0x1a, 0xd9, 0x79, 0xc9, - 0xc5, 0x9e, 0xcb, 0x5c, 0xec, 0xc9, 0x91, 0x9d, 0x7f, 0xd5, 0xe7, 0xc7, 0xc7, 0x00, 0xf4, 0x82, - 0xfc, 0xba, 0x9f, 0x2d, 0x1f, 0x42, 0xc5, 0xbc, 0x3c, 0xb3, 0x0f, 0x16, 0x5e, 0xd2, 0x9b, 0xc9, - 0xb3, 0xf4, 0xdc, 0x73, 0xba, 0xf5, 0x00, 0x1b, 0xd8, 0x73, 0x21, 0x3b, 0xee, 0x68, 0xf4, 0xba, - 0xcb, 0x3d, 0x80, 0xe6, 0x71, 0x18, 0xfe, 0x6b, 0x73, 0x7f, 0x0a, 0x65, 0xfd, 0x00, 0x8e, 0x73, - 0x3c, 0xb4, 0xc0, 0xec, 0x01, 0xd3, 0x4d, 0x6e, 0xd6, 0x24, 0xae, 0x01, 0x88, 0x9c, 0xe2, 0x7a, - 0x66, 0x73, 0x09, 0x39, 0x6f, 0x00, 0xd7, 0x80, 0x8d, 0x75, 0xa8, 0x98, 0xb7, 0x56, 0x56, 0x83, - 0xd2, 0xf1, 0xe1, 0xa0, 0xfb, 0xa4, 0xb5, 0xc4, 0xaa, 0x50, 0x3c, 0xe8, 0x0f, 0x9e, 0xb4, 0x72, - 0x48, 0x1d, 0xf6, 0x0f, 0xbb, 0xad, 0xfc, 0xc6, 0x6d, 0x68, 0x64, 0x5f, 0x5b, 0x59, 0x1d, 0x2a, - 0x83, 0x9d, 0xc3, 0xce, 0x6e, 0xff, 0x27, 0xad, 0x25, 0xd6, 0x80, 0x6a, 0xef, 0x70, 0xd0, 0xdd, - 0x3b, 0xe6, 0xdd, 0x56, 0x6e, 0xe3, 0xc7, 0x50, 0x4b, 0x1e, 0xa0, 0x50, 0xc3, 0x6e, 0xef, 0xb0, - 0xd3, 0x5a, 0x62, 0x00, 0xe5, 0x41, 0x77, 0x8f, 0x77, 0x51, 0x6f, 0x05, 0x0a, 0x83, 0xc1, 0x41, - 0x2b, 0x8f, 0xab, 0xee, 0xed, 0xec, 0x1d, 0x74, 0x5b, 0x05, 0x24, 0x9f, 0x3c, 0x3e, 0xda, 0x1f, - 0xb4, 0x8a, 0x1b, 0x1f, 0xc2, 0x1b, 0x97, 0x5e, 0x74, 0x70, 0xc5, 0x4e, 0x77, 0x7f, 0xe7, 0xf8, - 0x11, 0x9a, 0x58, 0x86, 0x7c, 0xff, 0x50, 0x2b, 0xea, 0xef, 0xef, 0xb7, 0xf2, 0x1b, 0x1f, 0xc3, - 0xb5, 0x85, 0x27, 0x19, 0x5a, 0xf0, 0x60, 0x87, 0x77, 0x71, 0xf1, 0x3a, 0x54, 0x8e, 0x78, 0xef, - 0xe9, 0xce, 0x93, 0x6e, 0x2b, 0x87, 0x82, 0x47, 0xfd, 0xbd, 0x87, 0xdd, 0x4e, 0x2b, 0xbf, 0x7b, - 0xf3, 0xab, 0x17, 0xab, 0xb9, 0x6f, 0x5e, 0xac, 0xe6, 0xbe, 0x7d, 0xb1, 0x9a, 0xfb, 0xeb, 0x8b, - 0xd5, 0xdc, 0x97, 0xdf, 0xaf, 0x2e, 0x7d, 0xf3, 0xfd, 0xea, 0xd2, 0xb7, 0xdf, 0xaf, 0x2e, 0x9d, - 0x94, 0xe9, 0x5f, 0x97, 0x8f, 0xfe, 0x19, 0x00, 0x00, 0xff, 0xff, 0xe8, 0xd7, 0x00, 0x96, 0xb5, - 0x19, 0x00, 0x00, ->>>>>>> v0.13.2 + // 2663 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x4f, 0x6f, 0x5b, 0xc7, + 0x11, 0x17, 0xff, 0x93, 0x43, 0x89, 0x66, 0xd6, 0x4e, 0xc2, 0xa8, 0xae, 0xac, 0xbc, 0xa4, 0x81, + 0x2c, 0xdb, 0x12, 0xa2, 0x00, 0x71, 0x6a, 0x04, 0x05, 0x24, 0x91, 0x8a, 0x18, 0xdb, 0xa2, 0xba, + 0x94, 0x9c, 0x02, 0x2d, 0x60, 0x3c, 0x3d, 0x2e, 0xa9, 0x07, 0x3d, 0xbe, 0x7d, 0x78, 0x6f, 0x69, + 0x89, 0x3d, 0xf4, 0xd0, 0x53, 0x8f, 0x01, 0x0a, 0xf4, 0x56, 0xf4, 0x4b, 0xf4, 0xd8, 0xde, 0x03, + 0xe4, 0x92, 0x43, 0x0f, 0x41, 0x0f, 0x69, 0xe1, 0x5c, 0xfa, 0x19, 0x8a, 0x16, 0x28, 0x66, 0x76, + 0xdf, 0x1f, 0x52, 0x32, 0x1c, 0xb7, 0x41, 0x4f, 0x9c, 0x37, 0xf3, 0xdb, 0xd9, 0xd9, 0xd9, 0x99, + 0xd9, 0xd9, 0x25, 0xd4, 0x64, 0x10, 0x6d, 0x04, 0xa1, 0x54, 0x92, 0xe5, 0x83, 0x93, 0xe5, 0x7b, + 0x23, 0x57, 0x9d, 0x4e, 0x4e, 0x36, 0x1c, 0x39, 0xde, 0x1c, 0xc9, 0x91, 0xdc, 0x24, 0xd1, 0xc9, + 0x64, 0x48, 0x5f, 0xf4, 0x41, 0x94, 0x1e, 0x62, 0xfd, 0x23, 0x0f, 0xf9, 0x5e, 0xc0, 0xde, 0x86, + 0xb2, 0xeb, 0x07, 0x13, 0x15, 0xb5, 0x72, 0xab, 0x85, 0xb5, 0xfa, 0x56, 0x6d, 0x23, 0x38, 0xd9, + 0xe8, 0x22, 0x87, 0x1b, 0x01, 0x5b, 0x85, 0xa2, 0xb8, 0x10, 0x4e, 0x2b, 0xbf, 0x9a, 0x5b, 0xab, + 0x6f, 0x01, 0x02, 0x3a, 0x17, 0xc2, 0xe9, 0x05, 0xfb, 0x0b, 0x9c, 0x24, 0xec, 0x3d, 0x28, 0x47, + 0x72, 0x12, 0x3a, 0xa2, 0x55, 0x20, 0xcc, 0x22, 0x62, 0xfa, 0xc4, 0x21, 0x94, 0x91, 0xa2, 0xa6, + 0xa1, 0xeb, 0x89, 0x56, 0x31, 0xd5, 0xb4, 0xe7, 0x7a, 0x1a, 0x43, 0x12, 0xf6, 0x0e, 0x94, 0x4e, + 0x26, 0xae, 0x37, 0x68, 0x95, 0x08, 0x52, 0x47, 0xc8, 0x0e, 0x32, 0x08, 0xa3, 0x65, 0x08, 0x1a, + 0x8b, 0x70, 0x24, 0x5a, 0xe5, 0x14, 0xf4, 0x18, 0x19, 0x1a, 0x44, 0x32, 0x9c, 0x6b, 0xe0, 0x0e, + 0x87, 0xad, 0x4a, 0x3a, 0x57, 0xdb, 0x1d, 0x0e, 0xf5, 0x5c, 0x28, 0x61, 0x6b, 0x50, 0x0d, 0x3c, + 0x5b, 0x0d, 0x65, 0x38, 0x6e, 0x41, 0x6a, 0xf7, 0xa1, 0xe1, 0xf1, 0x44, 0xca, 0xee, 0x43, 0xdd, + 0x91, 0x7e, 0xa4, 0x42, 0xdb, 0xf5, 0x55, 0xd4, 0xaa, 0x13, 0xf8, 0x75, 0x04, 0x7f, 0x26, 0xc3, + 0x33, 0x11, 0xee, 0xa6, 0x42, 0x9e, 0x45, 0xee, 0x14, 0x21, 0x2f, 0x03, 0xeb, 0x77, 0x39, 0xa8, + 0xc6, 0x5a, 0x99, 0x05, 0x8b, 0xdb, 0xa1, 0x73, 0xea, 0x2a, 0xe1, 0xa8, 0x49, 0x28, 0x5a, 0xb9, + 0xd5, 0xdc, 0x5a, 0x8d, 0xcf, 0xf0, 0x58, 0x03, 0xf2, 0xbd, 0x3e, 0xf9, 0xbb, 0xc6, 0xf3, 0xbd, + 0x3e, 0x6b, 0x41, 0xe5, 0x89, 0x1d, 0xba, 0xb6, 0xaf, 0xc8, 0xc1, 0x35, 0x1e, 0x7f, 0xb2, 0x9b, + 0x50, 0xeb, 0xf5, 0x9f, 0x88, 0x30, 0x72, 0xa5, 0x4f, 0x6e, 0xad, 0xf1, 0x94, 0xc1, 0x56, 0x00, + 0x7a, 0xfd, 0x3d, 0x61, 0xa3, 0xd2, 0xa8, 0x55, 0x5a, 0x2d, 0xac, 0xd5, 0x78, 0x86, 0x63, 0xfd, + 0x0a, 0x4a, 0xb4, 0xd5, 0xec, 0x53, 0x28, 0x0f, 0xdc, 0x91, 0x88, 0x94, 0x36, 0x67, 0x67, 0xeb, + 0x8b, 0x6f, 0x6e, 0x2d, 0xfc, 0xf5, 0x9b, 0x5b, 0xeb, 0x99, 0x98, 0x92, 0x81, 0xf0, 0x1d, 0xe9, + 0x2b, 0xdb, 0xf5, 0x45, 0x18, 0x6d, 0x8e, 0xe4, 0x3d, 0x3d, 0x64, 0xa3, 0x4d, 0x3f, 0xdc, 0x68, + 0x60, 0xb7, 0xa1, 0xe4, 0xfa, 0x03, 0x71, 0x41, 0xf6, 0x17, 0x76, 0xae, 0x1b, 0x55, 0xf5, 0xde, + 0x44, 0x05, 0x13, 0xd5, 0x45, 0x11, 0xd7, 0x08, 0xeb, 0xcb, 0x1c, 0x94, 0x75, 0x28, 0xb1, 0x9b, + 0x50, 0x1c, 0x0b, 0x65, 0xd3, 0xfc, 0xf5, 0xad, 0xaa, 0xde, 0x52, 0x65, 0x73, 0xe2, 0x62, 0x94, + 0x8e, 0xe5, 0x04, 0x7d, 0x9f, 0x4f, 0xa3, 0xf4, 0x31, 0x72, 0xb8, 0x11, 0xb0, 0x1f, 0x41, 0xc5, + 0x17, 0xea, 0x5c, 0x86, 0x67, 0xe4, 0xa3, 0x86, 0x0e, 0x8b, 0x03, 0xa1, 0x1e, 0xcb, 0x81, 0xe0, + 0xb1, 0x8c, 0xdd, 0x85, 0x6a, 0x24, 0x9c, 0x49, 0xe8, 0xaa, 0x29, 0xf9, 0xab, 0xb1, 0xd5, 0xa4, + 0x60, 0x35, 0x3c, 0x02, 0x27, 0x08, 0x76, 0x07, 0x6a, 0x91, 0x70, 0x42, 0xa1, 0x84, 0xff, 0x8c, + 0xfc, 0x57, 0xdf, 0x5a, 0x32, 0xf0, 0x50, 0xa8, 0x8e, 0xff, 0x8c, 0xa7, 0x72, 0xeb, 0xcb, 0x3c, + 0x14, 0xd1, 0x66, 0xc6, 0xa0, 0x68, 0x87, 0x23, 0x9d, 0x51, 0x35, 0x4e, 0x34, 0x6b, 0x42, 0x01, + 0x75, 0xe4, 0x89, 0x85, 0x24, 0x72, 0x9c, 0xf3, 0x81, 0xd9, 0x50, 0x24, 0x71, 0xdc, 0x24, 0x12, + 0xa1, 0xd9, 0x47, 0xa2, 0xd9, 0x6d, 0xa8, 0x05, 0xa1, 0xbc, 0x98, 0x3e, 0xd5, 0x16, 0xa4, 0x51, + 0x8a, 0x4c, 0x34, 0xa0, 0x1a, 0x18, 0x8a, 0xad, 0x03, 0x88, 0x0b, 0x15, 0xda, 0xfb, 0x32, 0x52, + 0x51, 0xab, 0x4c, 0xd6, 0x52, 0xdc, 0x23, 0xa3, 0x7b, 0xc8, 0x33, 0x52, 0xb6, 0x0c, 0xd5, 0x53, + 0x19, 0x29, 0xdf, 0x1e, 0x0b, 0xca, 0x90, 0x1a, 0x4f, 0xbe, 0x99, 0x05, 0xe5, 0x89, 0xe7, 0x8e, + 0x5d, 0xd5, 0xaa, 0xa5, 0x3a, 0x8e, 0x89, 0xc3, 0x8d, 0x04, 0xa3, 0xd8, 0x19, 0x85, 0x72, 0x12, + 0x1c, 0xda, 0xa1, 0xf0, 0x15, 0xe5, 0x4f, 0x8d, 0xcf, 0xf0, 0xd8, 0xc7, 0xf0, 0x56, 0x28, 0xc6, + 0xf2, 0x99, 0xa0, 0x8d, 0xea, 0xab, 0xc9, 0x49, 0xc4, 0xd1, 0xb1, 0x91, 0xfb, 0x4c, 0x50, 0x0e, + 0x55, 0xf9, 0x8b, 0x01, 0xd6, 0x5d, 0x28, 0x6b, 0xbb, 0xd1, 0x2d, 0x48, 0x99, 0x4c, 0x21, 0x1a, + 0x33, 0xa4, 0x7b, 0x18, 0x67, 0x48, 0xf7, 0xd0, 0x6a, 0x43, 0x59, 0x5b, 0x88, 0xe8, 0x03, 0x5c, + 0x95, 0x41, 0x23, 0x8d, 0xbc, 0xbe, 0x1c, 0x2a, 0x1d, 0x91, 0x9c, 0x68, 0xd2, 0x6a, 0x87, 0xda, + 0xff, 0x05, 0x4e, 0xb4, 0xf5, 0x10, 0x6a, 0xc9, 0xce, 0xd2, 0x14, 0x6d, 0xa3, 0x26, 0xdf, 0x6d, + 0xe3, 0x00, 0x72, 0x97, 0x9e, 0x94, 0x68, 0x74, 0xa3, 0x0c, 0x94, 0x2b, 0x7d, 0xdb, 0x23, 0x45, + 0x55, 0x9e, 0x7c, 0x5b, 0xff, 0x2c, 0x40, 0x89, 0x16, 0xc6, 0xd6, 0x30, 0x23, 0x82, 0x89, 0x5e, + 0x41, 0x61, 0x87, 0x99, 0x8c, 0x00, 0xca, 0xbd, 0x24, 0x21, 0x30, 0x0f, 0x97, 0x31, 0x3a, 0x3d, + 0xe1, 0x28, 0x19, 0x9a, 0x79, 0x92, 0x6f, 0x9c, 0x7f, 0x80, 0x19, 0xaa, 0x03, 0x86, 0x68, 0x76, + 0x07, 0xca, 0x92, 0xd2, 0x8a, 0x62, 0xe6, 0x05, 0xc9, 0x66, 0x20, 0xa8, 0x3c, 0x14, 0xf6, 0x40, + 0xfa, 0xde, 0x94, 0x22, 0xa9, 0xca, 0x93, 0x6f, 0x0c, 0x74, 0xca, 0xa3, 0xa3, 0x69, 0xa0, 0xcb, + 0x6a, 0x43, 0x07, 0xfa, 0xe3, 0x98, 0xc9, 0x53, 0x39, 0x16, 0xce, 0xa3, 0x71, 0x30, 0x8c, 0x7a, + 0x81, 0x6a, 0x5d, 0x4f, 0x43, 0x32, 0xe6, 0xf1, 0x44, 0x8a, 0x48, 0xc7, 0x76, 0x4e, 0x05, 0x22, + 0x6f, 0xa4, 0xc8, 0x5d, 0xc3, 0xe3, 0x89, 0x34, 0xcd, 0x34, 0x84, 0xbe, 0x4e, 0xd0, 0x4c, 0xa6, + 0x21, 0x36, 0x95, 0x63, 0x84, 0xf6, 0xfb, 0xfb, 0x88, 0x7c, 0x23, 0xad, 0xee, 0x9a, 0xc3, 0x8d, + 0x44, 0xaf, 0x36, 0x9a, 0x78, 0xaa, 0xdb, 0x6e, 0xbd, 0xa9, 0x5d, 0x19, 0x7f, 0xb3, 0x1f, 0xc3, + 0x22, 0x56, 0x32, 0xe1, 0x2b, 0xb2, 0xa4, 0xd5, 0xa2, 0x05, 0xbf, 0x9e, 0x2c, 0x78, 0x37, 0x23, + 0xe4, 0x33, 0x50, 0x2c, 0x33, 0x7d, 0xe9, 0x9c, 0xe1, 0xdc, 0x83, 0xf4, 0xf4, 0x31, 0x2c, 0x1e, + 0xcb, 0xac, 0x95, 0xd4, 0x45, 0xb8, 0x71, 0x91, 0xfb, 0x4b, 0x1d, 0x91, 0x05, 0x4e, 0xb4, 0xd5, + 0x85, 0x6a, 0xec, 0x84, 0x4b, 0x81, 0x76, 0x0f, 0x2a, 0xd1, 0xa9, 0x1d, 0xba, 0xfe, 0x88, 0x62, + 0xa0, 0xb1, 0x75, 0x3d, 0xf1, 0x59, 0x5f, 0xf3, 0x69, 0x2a, 0x83, 0xb1, 0x64, 0x1c, 0xb4, 0x57, + 0xe9, 0x6a, 0x42, 0x61, 0xe2, 0x0e, 0x48, 0xcf, 0x12, 0x47, 0x12, 0x39, 0x23, 0x57, 0x87, 0xfd, + 0x12, 0x47, 0x12, 0xed, 0x1b, 0xcb, 0x81, 0x3e, 0x95, 0x97, 0x38, 0xd1, 0x33, 0x81, 0x5d, 0x9a, + 0x0b, 0x6c, 0x2f, 0xf6, 0xfe, 0xff, 0x65, 0xb6, 0x9f, 0x26, 0x0e, 0xff, 0xbe, 0xa6, 0xb3, 0x7e, + 0x9b, 0x83, 0x6a, 0xdc, 0x9d, 0xe0, 0x19, 0xe9, 0x0e, 0x84, 0xaf, 0xdc, 0xa1, 0x2b, 0x42, 0xa3, + 0x3c, 0xc3, 0x61, 0xf7, 0xa0, 0x64, 0x2b, 0x15, 0xc6, 0x27, 0xcf, 0x9b, 0xd9, 0xd6, 0x66, 0x63, + 0x1b, 0x25, 0x1d, 0x5f, 0x85, 0x53, 0xae, 0x51, 0xcb, 0x1f, 0x01, 0xa4, 0x4c, 0xb4, 0xe7, 0x4c, + 0x4c, 0x8d, 0x56, 0x24, 0xd9, 0x0d, 0x28, 0x3d, 0xb3, 0xbd, 0x49, 0x5c, 0x46, 0xf4, 0xc7, 0x83, + 0xfc, 0x47, 0x39, 0xeb, 0xcf, 0x79, 0xa8, 0x98, 0x56, 0x87, 0xdd, 0x85, 0x0a, 0xb5, 0x3a, 0xc6, + 0xa2, 0xab, 0x6b, 0x46, 0x0c, 0x61, 0x9b, 0x49, 0x0f, 0x97, 0xb1, 0xd1, 0xa8, 0xd2, 0xbd, 0x9c, + 0xb1, 0x31, 0xed, 0xe8, 0x0a, 0x03, 0x31, 0x34, 0xcd, 0x5a, 0x83, 0x5a, 0x23, 0x31, 0x74, 0x7d, + 0x17, 0x5d, 0xce, 0x51, 0xc4, 0xee, 0xc6, 0xab, 0x2e, 0x92, 0xc6, 0x37, 0xb2, 0x1a, 0x2f, 0x2f, + 0xba, 0x0b, 0xf5, 0xcc, 0x34, 0x57, 0xac, 0xfa, 0xdd, 0xec, 0xaa, 0xcd, 0x94, 0xa4, 0x4e, 0x77, + 0x9a, 0xa9, 0x17, 0xfe, 0x07, 0xff, 0x7d, 0x08, 0x90, 0xaa, 0xfc, 0xee, 0x35, 0xd7, 0xfa, 0x53, + 0x01, 0xa0, 0x17, 0xe0, 0xc1, 0x3d, 0xb0, 0xa9, 0xd5, 0x58, 0x74, 0x47, 0xbe, 0x0c, 0xc5, 0x53, + 0xaa, 0x4d, 0x34, 0xbe, 0xca, 0xeb, 0x9a, 0xa7, 0x6b, 0xc0, 0x36, 0xd4, 0x07, 0x22, 0x72, 0x42, + 0x97, 0x62, 0xd4, 0x38, 0xfd, 0x16, 0xae, 0x29, 0xd5, 0xb3, 0xd1, 0x4e, 0x11, 0xda, 0x57, 0xd9, + 0x31, 0x6c, 0x0b, 0x16, 0xc5, 0x45, 0x20, 0x43, 0x65, 0x66, 0xd1, 0x1d, 0xf1, 0x35, 0xdd, 0x5b, + 0x23, 0x5f, 0xd7, 0x9e, 0xba, 0x48, 0x3f, 0x98, 0x0d, 0x45, 0xc7, 0x0e, 0x22, 0xd3, 0x87, 0xb4, + 0xe6, 0xe6, 0xdb, 0xb5, 0x03, 0xed, 0xb4, 0x9d, 0x0f, 0x70, 0xad, 0xbf, 0xfe, 0xdb, 0xad, 0x3b, + 0x99, 0xe6, 0x6d, 0x2c, 0x4f, 0xa6, 0x9b, 0x14, 0x2f, 0x67, 0xae, 0xda, 0x9c, 0x28, 0xd7, 0xdb, + 0xb4, 0x03, 0x17, 0xd5, 0xe1, 0xc0, 0x6e, 0x9b, 0x93, 0x6a, 0xf6, 0x11, 0x34, 0x82, 0x50, 0x8e, + 0x42, 0x11, 0x45, 0x4f, 0xe9, 0x28, 0x37, 0x2d, 0xf6, 0x6b, 0xa6, 0xe5, 0x20, 0xc9, 0x27, 0x28, + 0xe0, 0x4b, 0x41, 0xf6, 0x73, 0xf9, 0x27, 0xd0, 0x9c, 0x5f, 0xf1, 0xab, 0xec, 0xde, 0xf2, 0x7d, + 0xa8, 0x25, 0x2b, 0x78, 0xd9, 0xc0, 0x6a, 0x76, 0xdb, 0xff, 0x98, 0x83, 0xb2, 0xce, 0x47, 0x76, + 0x1f, 0x6a, 0x9e, 0x74, 0x6c, 0x34, 0x20, 0xbe, 0xce, 0xbc, 0x95, 0xa6, 0xeb, 0xc6, 0xa3, 0x58, + 0xa6, 0xf7, 0x23, 0xc5, 0x62, 0x78, 0xba, 0xfe, 0x50, 0xc6, 0xf9, 0xd3, 0x48, 0x07, 0x75, 0xfd, + 0xa1, 0xe4, 0x5a, 0xb8, 0xfc, 0x10, 0x1a, 0xb3, 0x2a, 0xae, 0xb0, 0xf3, 0x9d, 0xd9, 0x40, 0xa7, + 0x23, 0x2c, 0x19, 0x94, 0x35, 0xfb, 0x3e, 0xd4, 0x12, 0x3e, 0x5b, 0xbf, 0x6c, 0xf8, 0x62, 0x76, + 0x64, 0xc6, 0x56, 0xeb, 0x37, 0x39, 0x80, 0xd4, 0x36, 0x2c, 0x9d, 0x78, 0x71, 0xf2, 0xd3, 0x96, + 0x27, 0xf9, 0xa6, 0x8e, 0xc1, 0x56, 0x36, 0xd9, 0xb2, 0xc8, 0x89, 0x66, 0x1b, 0x00, 0x83, 0x24, + 0xd7, 0x5f, 0x50, 0x01, 0x32, 0x08, 0xd4, 0xef, 0xd9, 0xfe, 0x68, 0x62, 0x8f, 0x84, 0xe9, 0x4b, + 0x93, 0x6f, 0xab, 0x07, 0xd5, 0xd8, 0x42, 0xb6, 0x0a, 0xf5, 0xc8, 0x58, 0x85, 0xbd, 0x3f, 0x9a, + 0x52, 0xe2, 0x59, 0x16, 0xf6, 0xf0, 0xa1, 0xed, 0x8f, 0xc4, 0x4c, 0x0f, 0xcf, 0x91, 0xc3, 0x8d, + 0xc0, 0xfa, 0x0c, 0x4a, 0xc4, 0xc0, 0xec, 0x8d, 0x94, 0x1d, 0x2a, 0x73, 0x1d, 0xd0, 0x1d, 0xaf, + 0x8c, 0xc8, 0xa4, 0x9d, 0x22, 0xc6, 0x37, 0xd7, 0x00, 0xf6, 0x2e, 0xf6, 0xd5, 0x03, 0xe3, 0xee, + 0xab, 0x70, 0x28, 0xb6, 0x3e, 0x86, 0x6a, 0xcc, 0x46, 0xaf, 0x78, 0xae, 0x2f, 0x8c, 0x89, 0x44, + 0xe3, 0x35, 0xca, 0x39, 0xb5, 0x43, 0xdb, 0x51, 0x42, 0x37, 0x5e, 0x25, 0x9e, 0x32, 0xac, 0x77, + 0xa0, 0x9e, 0x49, 0x4a, 0x8c, 0xc5, 0x27, 0xb4, 0xc7, 0xba, 0x34, 0xe8, 0x0f, 0xeb, 0x13, 0x58, + 0x9a, 0x49, 0x10, 0x3c, 0xad, 0xdc, 0x41, 0x7c, 0x5a, 0xe9, 0x93, 0xe8, 0x52, 0xff, 0xc8, 0xa0, + 0x78, 0x2e, 0xec, 0x33, 0xd3, 0x3b, 0x12, 0x6d, 0xfd, 0x01, 0x6f, 0x8b, 0x71, 0x4f, 0xff, 0x43, + 0x80, 0x53, 0xa5, 0x82, 0xa7, 0xd4, 0xe4, 0x1b, 0x65, 0x35, 0xe4, 0x10, 0x82, 0xdd, 0x82, 0x3a, + 0x7e, 0x44, 0x46, 0xae, 0x55, 0xd3, 0x88, 0x48, 0x03, 0x7e, 0x00, 0xb5, 0x61, 0x32, 0xbc, 0x60, + 0xe2, 0x23, 0x1e, 0xfd, 0x16, 0x54, 0x7d, 0x69, 0x64, 0x7a, 0x6f, 0x2b, 0xbe, 0x4c, 0xc6, 0xd9, + 0x9e, 0x67, 0x64, 0x25, 0x3d, 0xce, 0xf6, 0x3c, 0x12, 0x5a, 0x77, 0xe0, 0xb5, 0x4b, 0xf7, 0x5e, + 0xf6, 0x06, 0x94, 0x87, 0xae, 0xa7, 0xe8, 0xc4, 0xc2, 0x3b, 0x8e, 0xf9, 0xb2, 0xfe, 0x9d, 0x03, + 0x48, 0x63, 0x0b, 0x53, 0x06, 0x8f, 0x1e, 0xc4, 0x2c, 0xea, 0xa3, 0xc6, 0x83, 0xea, 0xd8, 0x14, + 0x31, 0x13, 0x19, 0x37, 0x67, 0xe3, 0x71, 0x23, 0xae, 0x71, 0xba, 0xbc, 0x6d, 0x99, 0xf2, 0xf6, + 0x2a, 0x77, 0xd3, 0x64, 0x06, 0x6a, 0x1d, 0xb3, 0x4f, 0x15, 0x90, 0xe6, 0x3a, 0x37, 0x92, 0xe5, + 0x87, 0xb0, 0x34, 0x33, 0xe5, 0x77, 0x3c, 0xd0, 0xd2, 0x62, 0x9c, 0x4d, 0xf4, 0x2d, 0x28, 0xeb, + 0x37, 0x0e, 0xb6, 0x06, 0x15, 0xdb, 0xd1, 0x39, 0x9e, 0xa9, 0x33, 0x28, 0xdc, 0x26, 0x36, 0x8f, + 0xc5, 0xd6, 0x5f, 0xf2, 0x00, 0x29, 0xff, 0x15, 0xee, 0x0f, 0x0f, 0xa0, 0x11, 0x09, 0x47, 0xfa, + 0x03, 0x3b, 0x9c, 0x92, 0xd4, 0x5c, 0xc2, 0xaf, 0x1a, 0x32, 0x87, 0xcc, 0xdc, 0x25, 0x0a, 0x2f, + 0xbf, 0x4b, 0xac, 0x41, 0xd1, 0x91, 0xc1, 0xd4, 0x9c, 0x5b, 0x6c, 0x76, 0x21, 0xbb, 0x32, 0x98, + 0xee, 0x2f, 0x70, 0x42, 0xb0, 0x0d, 0x28, 0x8f, 0xcf, 0xe8, 0xd5, 0x47, 0xdf, 0x5e, 0x6f, 0xcc, + 0x62, 0x1f, 0x9f, 0x21, 0xbd, 0xbf, 0xc0, 0x0d, 0x8a, 0xdd, 0x81, 0xd2, 0xf8, 0x6c, 0xe0, 0x86, + 0xe6, 0xe4, 0xb9, 0x3e, 0x0f, 0x6f, 0xbb, 0x21, 0x3d, 0xf2, 0x20, 0x86, 0x59, 0x90, 0x0f, 0xc7, + 0xe6, 0x89, 0xa7, 0x39, 0xe7, 0xcd, 0xf1, 0xfe, 0x02, 0xcf, 0x87, 0xe3, 0x9d, 0x2a, 0x94, 0xb5, + 0x5f, 0xad, 0x7f, 0x15, 0xa0, 0x31, 0x6b, 0x25, 0xee, 0x6c, 0x14, 0x3a, 0xf1, 0xce, 0x46, 0xa1, + 0x93, 0x5c, 0xb3, 0xf2, 0x99, 0x6b, 0x96, 0x05, 0x25, 0x79, 0xee, 0x8b, 0x30, 0xfb, 0xbc, 0xb5, + 0x7b, 0x2a, 0xcf, 0x7d, 0x6c, 0xc4, 0xb5, 0x68, 0xa6, 0xd1, 0x2c, 0x99, 0xbe, 0xf6, 0x5d, 0x58, + 0x1a, 0x4a, 0xcf, 0x93, 0xe7, 0xfd, 0xe9, 0xd8, 0x73, 0xfd, 0x33, 0xd3, 0xdc, 0xce, 0x32, 0xd9, + 0x1a, 0x5c, 0x1b, 0xb8, 0x21, 0x9a, 0x63, 0xee, 0x1d, 0x11, 0xad, 0xbd, 0xca, 0xe7, 0xd9, 0xec, + 0x53, 0x58, 0xb5, 0x95, 0x12, 0xe3, 0x40, 0x1d, 0xfb, 0x81, 0xed, 0x9c, 0xb5, 0xa5, 0x43, 0x59, + 0x38, 0x0e, 0x6c, 0xe5, 0x9e, 0xb8, 0x9e, 0xab, 0xa6, 0xe4, 0x8c, 0x2a, 0x7f, 0x29, 0x8e, 0xbd, + 0x07, 0x0d, 0x27, 0x14, 0xb6, 0x12, 0x6d, 0x11, 0xa9, 0x43, 0x5b, 0x9d, 0xb6, 0xaa, 0x34, 0x72, + 0x8e, 0x8b, 0x6b, 0xb0, 0xd1, 0xda, 0xcf, 0x5c, 0x6f, 0xe0, 0xe0, 0x85, 0xb9, 0xa6, 0xd7, 0x30, + 0xc3, 0x64, 0x1b, 0xc0, 0x88, 0xd1, 0x19, 0x07, 0x6a, 0x9a, 0x40, 0x81, 0xa0, 0x57, 0x48, 0xb0, + 0xe0, 0x2a, 0x77, 0x2c, 0x22, 0x65, 0x8f, 0x03, 0x7a, 0x0b, 0x28, 0xf0, 0x94, 0xc1, 0x6e, 0x43, + 0xd3, 0xf5, 0x1d, 0x6f, 0x32, 0x10, 0x4f, 0x03, 0x5c, 0x48, 0xe8, 0x47, 0xad, 0x45, 0xaa, 0x2a, + 0xd7, 0x0c, 0xff, 0xd0, 0xb0, 0x11, 0x2a, 0x2e, 0xe6, 0xa0, 0x4b, 0x1a, 0x6a, 0xf8, 0x31, 0xd4, + 0xfa, 0x3c, 0x07, 0xcd, 0xf9, 0xc0, 0xc3, 0x6d, 0x0b, 0x70, 0xf1, 0xe6, 0xb9, 0x00, 0xe9, 0x64, + 0x2b, 0xf3, 0x99, 0xad, 0x8c, 0xcf, 0xd2, 0x42, 0xe6, 0x2c, 0x4d, 0xc2, 0xa2, 0xf8, 0xe2, 0xb0, + 0x98, 0x59, 0x68, 0x69, 0x6e, 0xa1, 0xd6, 0xef, 0x73, 0x70, 0x6d, 0x2e, 0xb8, 0xbf, 0xb3, 0x45, + 0xab, 0x50, 0x1f, 0xdb, 0x67, 0x42, 0x3f, 0xb6, 0x44, 0xe6, 0x08, 0xc9, 0xb2, 0xbe, 0x07, 0xfb, + 0x7c, 0x58, 0xcc, 0x66, 0xd4, 0x95, 0xb6, 0xc5, 0x01, 0x72, 0x20, 0xd5, 0x9e, 0x9c, 0x98, 0xb3, + 0x38, 0x0e, 0x90, 0x98, 0x79, 0x39, 0x8c, 0x0a, 0x57, 0x84, 0x91, 0x75, 0x00, 0xd5, 0xd8, 0x40, + 0x76, 0xcb, 0xbc, 0x86, 0xe5, 0xd2, 0x6b, 0xf6, 0x71, 0x24, 0x42, 0xb4, 0x5d, 0x3f, 0x8d, 0xbd, + 0x0d, 0x25, 0xdd, 0xa3, 0xe6, 0x2f, 0x23, 0xb4, 0xc4, 0xea, 0x43, 0xc5, 0x70, 0xd8, 0x3a, 0x94, + 0x4f, 0xa6, 0xc9, 0xcb, 0x90, 0x29, 0x17, 0xf8, 0x3d, 0x30, 0x08, 0xac, 0x41, 0x1a, 0xc1, 0x6e, + 0x40, 0xf1, 0x64, 0xda, 0x6d, 0xeb, 0x9b, 0x25, 0x56, 0x32, 0xfc, 0xda, 0x29, 0x6b, 0x83, 0xac, + 0x47, 0xb0, 0x98, 0x1d, 0x97, 0x1c, 0xec, 0xb9, 0xcc, 0xc1, 0x9e, 0x94, 0xec, 0xfc, 0xcb, 0xae, + 0x1f, 0x1f, 0x02, 0xd0, 0xdb, 0xf5, 0xab, 0x5e, 0x5b, 0xde, 0x87, 0x8a, 0x79, 0xf3, 0x66, 0xef, + 0xcd, 0xbd, 0xe1, 0x37, 0x92, 0x07, 0xf1, 0x99, 0x87, 0x7c, 0xeb, 0x01, 0x36, 0xb0, 0xe7, 0x22, + 0x6c, 0xbb, 0xc3, 0xe1, 0xab, 0x4e, 0xf7, 0x00, 0x1a, 0xc7, 0x41, 0xf0, 0xdf, 0x8d, 0xfd, 0x05, + 0x94, 0xf5, 0xd3, 0x3b, 0x8e, 0xf1, 0xd0, 0x02, 0xb3, 0x07, 0x4c, 0x37, 0xb9, 0x59, 0x93, 0xb8, + 0x06, 0x20, 0x72, 0x82, 0xf3, 0x99, 0xcd, 0x25, 0xe4, 0xac, 0x01, 0x5c, 0x03, 0xd6, 0xd7, 0xa0, + 0x62, 0x5e, 0x79, 0x59, 0x0d, 0x4a, 0xc7, 0x07, 0xfd, 0xce, 0x51, 0x73, 0x81, 0x55, 0xa1, 0xb8, + 0xdf, 0xeb, 0x1f, 0x35, 0x73, 0x48, 0x1d, 0xf4, 0x0e, 0x3a, 0xcd, 0xfc, 0xfa, 0x6d, 0x58, 0xcc, + 0xbe, 0xf3, 0xb2, 0x3a, 0x54, 0xfa, 0xdb, 0x07, 0xed, 0x9d, 0xde, 0xcf, 0x9a, 0x0b, 0x6c, 0x11, + 0xaa, 0xdd, 0x83, 0x7e, 0x67, 0xf7, 0x98, 0x77, 0x9a, 0xb9, 0xf5, 0x9f, 0x43, 0x2d, 0x79, 0xfa, + 0x42, 0x0d, 0x3b, 0xdd, 0x83, 0x76, 0x73, 0x81, 0x01, 0x94, 0xfb, 0x9d, 0x5d, 0xde, 0x41, 0xbd, + 0x15, 0x28, 0xf4, 0xfb, 0xfb, 0xcd, 0x3c, 0xce, 0xba, 0xbb, 0xbd, 0xbb, 0xdf, 0x69, 0x16, 0x90, + 0x3c, 0x7a, 0x7c, 0xb8, 0xd7, 0x6f, 0x16, 0xd9, 0x12, 0xd4, 0xd0, 0x80, 0xa7, 0x34, 0x72, 0x40, + 0x23, 0x7b, 0xbb, 0x0f, 0x3b, 0x47, 0x4d, 0xb1, 0xfe, 0x3e, 0xbc, 0x76, 0xe9, 0x99, 0x09, 0x8d, + 0x69, 0x77, 0xf6, 0xb6, 0x8f, 0x1f, 0xa1, 0xf5, 0x65, 0xc8, 0xf7, 0x0e, 0xf4, 0x1c, 0xbd, 0xbd, + 0xbd, 0x66, 0x7e, 0xfd, 0x43, 0xb8, 0x36, 0xf7, 0x00, 0x44, 0x1a, 0xf7, 0xb7, 0x79, 0x07, 0xed, + 0xaa, 0x43, 0xe5, 0x90, 0x77, 0x9f, 0x6c, 0x1f, 0x75, 0x9a, 0x39, 0x14, 0x3c, 0xc2, 0xa9, 0xda, + 0xcd, 0xfc, 0xce, 0xcd, 0x2f, 0x9e, 0xaf, 0xe4, 0xbe, 0x7a, 0xbe, 0x92, 0xfb, 0xfa, 0xf9, 0x4a, + 0xee, 0xef, 0xcf, 0x57, 0x72, 0x9f, 0x7f, 0xbb, 0xb2, 0xf0, 0xd5, 0xb7, 0x2b, 0x0b, 0x5f, 0x7f, + 0xbb, 0xb2, 0x70, 0x52, 0xa6, 0xbf, 0x82, 0x3e, 0xf8, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x90, + 0x66, 0xbb, 0x95, 0x4a, 0x1a, 0x00, 0x00, } func (m *Op) Marshal() (dAtA []byte, err error) { @@ -3954,7 +3773,6 @@ func (m *Mount) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l -<<<<<<< HEAD if m.SockOpt != nil { { size, err := m.SockOpt.MarshalToSizedBuffer(dAtA[:i]) @@ -3968,14 +3786,13 @@ func (m *Mount) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x6 i-- dAtA[i] = 0xa2 -======= + } if m.ContentCache != 0 { i = encodeVarintOps(dAtA, i, uint64(m.ContentCache)) i-- dAtA[i] = 0x1 i-- dAtA[i] = 0xc0 ->>>>>>> v0.13.2 } if len(m.ResultID) > 0 { i -= len(m.ResultID) @@ -6245,14 +6062,12 @@ func (m *Mount) Size() (n int) { if l > 0 { n += 2 + l + sovOps(uint64(l)) } -<<<<<<< HEAD + if m.ContentCache != 0 { + n += 2 + sovOps(uint64(m.ContentCache)) + } if m.SockOpt != nil { l = m.SockOpt.Size() n += 2 + l + sovOps(uint64(l)) -======= - if m.ContentCache != 0 { - n += 2 + sovOps(uint64(m.ContentCache)) ->>>>>>> v0.13.2 } return n } @@ -8983,19 +8798,11 @@ func (m *Mount) Unmarshal(dAtA []byte) error { } m.ResultID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex -<<<<<<< HEAD - case 100: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SockOpt", wireType) - } - var msglen int -======= case 24: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field ContentCache", wireType) } m.ContentCache = 0 ->>>>>>> v0.13.2 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowOps @@ -9005,16 +8812,30 @@ func (m *Mount) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ -<<<<<<< HEAD - msglen |= int(b&0x7F) << shift -======= m.ContentCache |= MountContentCache(b&0x7F) << shift ->>>>>>> v0.13.2 if b < 0x80 { break } } -<<<<<<< HEAD + case 100: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SockOpt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOps + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } if msglen < 0 { return ErrInvalidLengthOps } @@ -9032,8 +8853,6 @@ func (m *Mount) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex -======= ->>>>>>> v0.13.2 default: iNdEx = preIndex skippy, err := skipOps(dAtA[iNdEx:]) diff --git a/solver/pb/ops.proto b/solver/pb/ops.proto index 54af0f023..c0bc1b1d9 100644 --- a/solver/pb/ops.proto +++ b/solver/pb/ops.proto @@ -109,12 +109,9 @@ message Mount { SecretOpt secretOpt = 21; SSHOpt SSHOpt = 22; string resultID = 23; -<<<<<<< HEAD - - SockOpt SockOpt = 100; // earthly -======= MountContentCache contentCache = 24; ->>>>>>> v0.13.2 + + SockOpt SockOpt = 100; // EarthBuild } // MountType defines a type of a mount from a supported set diff --git a/solver/scheduler.go b/solver/scheduler.go index cd7859acf..2631540d1 100644 --- a/solver/scheduler.go +++ b/solver/scheduler.go @@ -2,11 +2,8 @@ package solver import ( "context" -<<<<<<< HEAD - "fmt" -======= "encoding/csv" ->>>>>>> v0.13.2 + "fmt" "os" "strings" "sync" diff --git a/util/semutil/weighted.go b/util/semutil/weighted.go index a4c2e8fd2..c9baec7ea 100644 --- a/util/semutil/weighted.go +++ b/util/semutil/weighted.go @@ -63,7 +63,7 @@ func (s *Weighted) Acquire(ctx context.Context, n int64) error { // Don't make other Acquire calls block on one that's doomed to fail. s.mu.Unlock() <-ctx.Done() - return ctx.Err() + return context.Cause(ctx) } ready := make(chan struct{}) @@ -73,7 +73,7 @@ func (s *Weighted) Acquire(ctx context.Context, n int64) error { select { case <-ctx.Done(): - err := ctx.Err() + err := context.Cause(ctx) s.mu.Lock() select { case <-ready: diff --git a/vendor/github.com/docker/libtrust/README.md b/vendor/github.com/docker/libtrust/README.md index 8e7db3818..dcffb31ae 100644 --- a/vendor/github.com/docker/libtrust/README.md +++ b/vendor/github.com/docker/libtrust/README.md @@ -1,5 +1,9 @@ # libtrust +> **WARNING** this library is no longer actively developed, and will be integrated +> in the [docker/distribution][https://www.github.com/docker/distribution] +> repository in future. + Libtrust is library for managing authentication and authorization using public key cryptography. Authentication is handled using the identity attached to the public key. diff --git a/vendor/github.com/docker/libtrust/util.go b/vendor/github.com/docker/libtrust/util.go index 45dc3e182..a5a101d3f 100644 --- a/vendor/github.com/docker/libtrust/util.go +++ b/vendor/github.com/docker/libtrust/util.go @@ -152,7 +152,7 @@ func NewIdentityAuthTLSClientConfig(dockerUrl string, trustUnknownHosts bool, ro } // joseBase64UrlEncode encodes the given data using the standard base64 url -// encoding format but with all trailing '=' characters ommitted in accordance +// encoding format but with all trailing '=' characters omitted in accordance // with the jose specification. // http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-31#section-2 func joseBase64UrlEncode(b []byte) string { @@ -164,6 +164,8 @@ func joseBase64UrlEncode(b []byte) string { // accordance with the jose specification. // http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-31#section-2 func joseBase64UrlDecode(s string) ([]byte, error) { + s = strings.Replace(s, "\n", "", -1) + s = strings.Replace(s, " ", "", -1) switch len(s) % 4 { case 0: case 2: diff --git a/vendor/github.com/garyburd/redigo/LICENSE b/vendor/github.com/garyburd/redigo/LICENSE new file mode 100644 index 000000000..67db85882 --- /dev/null +++ b/vendor/github.com/garyburd/redigo/LICENSE @@ -0,0 +1,175 @@ + + 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. diff --git a/vendor/github.com/garyburd/redigo/internal/commandinfo.go b/vendor/github.com/garyburd/redigo/internal/commandinfo.go index 7ad1ade57..11e584257 100644 --- a/vendor/github.com/garyburd/redigo/internal/commandinfo.go +++ b/vendor/github.com/garyburd/redigo/internal/commandinfo.go @@ -40,6 +40,15 @@ var commandInfos = map[string]CommandInfo{ "MONITOR": {Set: MonitorState}, } +func init() { + for n, ci := range commandInfos { + commandInfos[strings.ToLower(n)] = ci + } +} + func LookupCommandInfo(commandName string) CommandInfo { + if ci, ok := commandInfos[commandName]; ok { + return ci + } return commandInfos[strings.ToUpper(commandName)] } diff --git a/vendor/github.com/garyburd/redigo/redis/conn.go b/vendor/github.com/garyburd/redigo/redis/conn.go index ac0e971c4..fad7d6c95 100644 --- a/vendor/github.com/garyburd/redigo/redis/conn.go +++ b/vendor/github.com/garyburd/redigo/redis/conn.go @@ -17,18 +17,24 @@ package redis import ( "bufio" "bytes" + "crypto/tls" "errors" "fmt" "io" "net" + "net/url" + "regexp" "strconv" "sync" "time" ) +var ( + _ ConnWithTimeout = (*conn)(nil) +) + // conn is the low-level implementation of Conn type conn struct { - // Shared mu sync.Mutex pending int @@ -51,59 +57,246 @@ type conn struct { numScratch [40]byte } -// Dial connects to the Redis server at the given network and address. -func Dial(network, address string) (Conn, error) { - dialer := xDialer{} - return dialer.Dial(network, address) -} - // DialTimeout acts like Dial but takes timeouts for establishing the // connection to the server, writing a command and reading a reply. +// +// Deprecated: This package is replaced by github.com/gomodule/redigo/redis. func DialTimeout(network, address string, connectTimeout, readTimeout, writeTimeout time.Duration) (Conn, error) { - netDialer := net.Dialer{Timeout: connectTimeout} - dialer := xDialer{ - NetDial: netDialer.Dial, - ReadTimeout: readTimeout, - WriteTimeout: writeTimeout, - } - return dialer.Dial(network, address) + return Dial(network, address, + DialConnectTimeout(connectTimeout), + DialReadTimeout(readTimeout), + DialWriteTimeout(writeTimeout)) +} + +// DialOption specifies an option for dialing a Redis server. +type DialOption struct { + f func(*dialOptions) } -// A Dialer specifies options for connecting to a Redis server. -type xDialer struct { - // NetDial specifies the dial function for creating TCP connections. If - // NetDial is nil, then net.Dial is used. - NetDial func(network, addr string) (net.Conn, error) +type dialOptions struct { + readTimeout time.Duration + writeTimeout time.Duration + dialer *net.Dialer + dial func(network, addr string) (net.Conn, error) + db int + password string + useTLS bool + skipVerify bool + tlsConfig *tls.Config +} - // ReadTimeout specifies the timeout for reading a single command - // reply. If ReadTimeout is zero, then no timeout is used. - ReadTimeout time.Duration +// DialReadTimeout specifies the timeout for reading a single command reply. +func DialReadTimeout(d time.Duration) DialOption { + return DialOption{func(do *dialOptions) { + do.readTimeout = d + }} +} + +// DialWriteTimeout specifies the timeout for writing a single command. +func DialWriteTimeout(d time.Duration) DialOption { + return DialOption{func(do *dialOptions) { + do.writeTimeout = d + }} +} + +// DialConnectTimeout specifies the timeout for connecting to the Redis server when +// no DialNetDial option is specified. +func DialConnectTimeout(d time.Duration) DialOption { + return DialOption{func(do *dialOptions) { + do.dialer.Timeout = d + }} +} + +// DialKeepAlive specifies the keep-alive period for TCP connections to the Redis server +// when no DialNetDial option is specified. +// If zero, keep-alives are not enabled. If no DialKeepAlive option is specified then +// the default of 5 minutes is used to ensure that half-closed TCP sessions are detected. +func DialKeepAlive(d time.Duration) DialOption { + return DialOption{func(do *dialOptions) { + do.dialer.KeepAlive = d + }} +} + +// DialNetDial specifies a custom dial function for creating TCP +// connections, otherwise a net.Dialer customized via the other options is used. +// DialNetDial overrides DialConnectTimeout and DialKeepAlive. +func DialNetDial(dial func(network, addr string) (net.Conn, error)) DialOption { + return DialOption{func(do *dialOptions) { + do.dial = dial + }} +} + +// DialDatabase specifies the database to select when dialing a connection. +func DialDatabase(db int) DialOption { + return DialOption{func(do *dialOptions) { + do.db = db + }} +} + +// DialPassword specifies the password to use when connecting to +// the Redis server. +func DialPassword(password string) DialOption { + return DialOption{func(do *dialOptions) { + do.password = password + }} +} - // WriteTimeout specifies the timeout for writing a single command. If - // WriteTimeout is zero, then no timeout is used. - WriteTimeout time.Duration +// DialTLSConfig specifies the config to use when a TLS connection is dialed. +// Has no effect when not dialing a TLS connection. +func DialTLSConfig(c *tls.Config) DialOption { + return DialOption{func(do *dialOptions) { + do.tlsConfig = c + }} } -// Dial connects to the Redis server at address on the named network. -func (d *xDialer) Dial(network, address string) (Conn, error) { - dial := d.NetDial - if dial == nil { - dial = net.Dial +// DialTLSSkipVerify disables server name verification when connecting over +// TLS. Has no effect when not dialing a TLS connection. +func DialTLSSkipVerify(skip bool) DialOption { + return DialOption{func(do *dialOptions) { + do.skipVerify = skip + }} +} + +// DialUseTLS specifies whether TLS should be used when connecting to the +// server. This option is ignore by DialURL. +func DialUseTLS(useTLS bool) DialOption { + return DialOption{func(do *dialOptions) { + do.useTLS = useTLS + }} +} + +// Dial connects to the Redis server at the given network and +// address using the specified options. +// +// Deprecated: This package is replaced by github.com/gomodule/redigo/redis. +func Dial(network, address string, options ...DialOption) (Conn, error) { + do := dialOptions{ + dialer: &net.Dialer{ + KeepAlive: time.Minute * 5, + }, + } + for _, option := range options { + option.f(&do) } - netConn, err := dial(network, address) + if do.dial == nil { + do.dial = do.dialer.Dial + } + + netConn, err := do.dial(network, address) if err != nil { return nil, err } - return &conn{ + + if do.useTLS { + var tlsConfig *tls.Config + if do.tlsConfig == nil { + tlsConfig = &tls.Config{InsecureSkipVerify: do.skipVerify} + } else { + tlsConfig = cloneTLSConfig(do.tlsConfig) + } + if tlsConfig.ServerName == "" { + host, _, err := net.SplitHostPort(address) + if err != nil { + netConn.Close() + return nil, err + } + tlsConfig.ServerName = host + } + + tlsConn := tls.Client(netConn, tlsConfig) + if err := tlsConn.Handshake(); err != nil { + netConn.Close() + return nil, err + } + netConn = tlsConn + } + + c := &conn{ conn: netConn, bw: bufio.NewWriter(netConn), br: bufio.NewReader(netConn), - readTimeout: d.ReadTimeout, - writeTimeout: d.WriteTimeout, - }, nil + readTimeout: do.readTimeout, + writeTimeout: do.writeTimeout, + } + + if do.password != "" { + if _, err := c.Do("AUTH", do.password); err != nil { + netConn.Close() + return nil, err + } + } + + if do.db != 0 { + if _, err := c.Do("SELECT", do.db); err != nil { + netConn.Close() + return nil, err + } + } + + return c, nil +} + +var pathDBRegexp = regexp.MustCompile(`/(\d*)\z`) + +// DialURL connects to a Redis server at the given URL using the Redis +// URI scheme. URLs should follow the draft IANA specification for the +// scheme (https://www.iana.org/assignments/uri-schemes/prov/redis). +// +// Deprecated: This package is replaced by github.com/gomodule/redigo/redis. +func DialURL(rawurl string, options ...DialOption) (Conn, error) { + u, err := url.Parse(rawurl) + if err != nil { + return nil, err + } + + if u.Scheme != "redis" && u.Scheme != "rediss" { + return nil, fmt.Errorf("invalid redis URL scheme: %s", u.Scheme) + } + + // As per the IANA draft spec, the host defaults to localhost and + // the port defaults to 6379. + host, port, err := net.SplitHostPort(u.Host) + if err != nil { + // assume port is missing + host = u.Host + port = "6379" + } + if host == "" { + host = "localhost" + } + address := net.JoinHostPort(host, port) + + if u.User != nil { + password, isSet := u.User.Password() + if isSet { + options = append(options, DialPassword(password)) + } + } + + match := pathDBRegexp.FindStringSubmatch(u.Path) + if len(match) == 2 { + db := 0 + if len(match[1]) > 0 { + db, err = strconv.Atoi(match[1]) + if err != nil { + return nil, fmt.Errorf("invalid database: %s", u.Path[1:]) + } + } + if db != 0 { + options = append(options, DialDatabase(db)) + } + } else if u.Path != "" { + return nil, fmt.Errorf("invalid database: %s", u.Path[1:]) + } + + options = append(options, DialUseTLS(u.Scheme == "rediss")) + + return Dial("tcp", address, options...) } // NewConn returns a new Redigo connection for the given net connection. +// +// Deprecated: This package is replaced by github.com/gomodule/redigo/redis. func NewConn(netConn net.Conn, readTimeout, writeTimeout time.Duration) Conn { return &conn{ conn: netConn, @@ -183,39 +376,55 @@ func (c *conn) writeFloat64(n float64) error { return c.writeBytes(strconv.AppendFloat(c.numScratch[:0], n, 'g', -1, 64)) } -func (c *conn) writeCommand(cmd string, args []interface{}) (err error) { +func (c *conn) writeCommand(cmd string, args []interface{}) error { c.writeLen('*', 1+len(args)) - err = c.writeString(cmd) + if err := c.writeString(cmd); err != nil { + return err + } for _, arg := range args { - if err != nil { - break + if err := c.writeArg(arg, true); err != nil { + return err } - switch arg := arg.(type) { - case string: - err = c.writeString(arg) - case []byte: - err = c.writeBytes(arg) - case int: - err = c.writeInt64(int64(arg)) - case int64: - err = c.writeInt64(arg) - case float64: - err = c.writeFloat64(arg) - case bool: - if arg { - err = c.writeString("1") - } else { - err = c.writeString("0") - } - case nil: - err = c.writeString("") - default: - var buf bytes.Buffer - fmt.Fprint(&buf, arg) - err = c.writeBytes(buf.Bytes()) + } + return nil +} + +func (c *conn) writeArg(arg interface{}, argumentTypeOK bool) (err error) { + switch arg := arg.(type) { + case string: + return c.writeString(arg) + case []byte: + return c.writeBytes(arg) + case int: + return c.writeInt64(int64(arg)) + case int64: + return c.writeInt64(arg) + case float64: + return c.writeFloat64(arg) + case bool: + if arg { + return c.writeString("1") + } else { + return c.writeString("0") + } + case nil: + return c.writeString("") + case Argument: + if argumentTypeOK { + return c.writeArg(arg.RedisArg(), false) } + // See comment in default clause below. + var buf bytes.Buffer + fmt.Fprint(&buf, arg) + return c.writeBytes(buf.Bytes()) + default: + // This default clause is intended to handle builtin numeric types. + // The function should return an error for other types, but this is not + // done for compatibility with previous versions of the package. + var buf bytes.Buffer + fmt.Fprint(&buf, arg) + return c.writeBytes(buf.Bytes()) } - return err } type protocolError string @@ -377,10 +586,17 @@ func (c *conn) Flush() error { return nil } -func (c *conn) Receive() (reply interface{}, err error) { - if c.readTimeout != 0 { - c.conn.SetReadDeadline(time.Now().Add(c.readTimeout)) +func (c *conn) Receive() (interface{}, error) { + return c.ReceiveWithTimeout(c.readTimeout) +} + +func (c *conn) ReceiveWithTimeout(timeout time.Duration) (reply interface{}, err error) { + var deadline time.Time + if timeout != 0 { + deadline = time.Now().Add(timeout) } + c.conn.SetReadDeadline(deadline) + if reply, err = c.readReply(); err != nil { return nil, c.fatal(err) } @@ -403,6 +619,10 @@ func (c *conn) Receive() (reply interface{}, err error) { } func (c *conn) Do(cmd string, args ...interface{}) (interface{}, error) { + return c.DoWithTimeout(c.readTimeout, cmd, args...) +} + +func (c *conn) DoWithTimeout(readTimeout time.Duration, cmd string, args ...interface{}) (interface{}, error) { c.mu.Lock() pending := c.pending c.pending = 0 @@ -417,16 +637,20 @@ func (c *conn) Do(cmd string, args ...interface{}) (interface{}, error) { } if cmd != "" { - c.writeCommand(cmd, args) + if err := c.writeCommand(cmd, args); err != nil { + return nil, c.fatal(err) + } } if err := c.bw.Flush(); err != nil { return nil, c.fatal(err) } - if c.readTimeout != 0 { - c.conn.SetReadDeadline(time.Now().Add(c.readTimeout)) + var deadline time.Time + if readTimeout != 0 { + deadline = time.Now().Add(readTimeout) } + c.conn.SetReadDeadline(deadline) if cmd == "" { reply := make([]interface{}, pending) diff --git a/vendor/github.com/garyburd/redigo/redis/doc.go b/vendor/github.com/garyburd/redigo/redis/doc.go index a5cd454af..60a0dfd07 100644 --- a/vendor/github.com/garyburd/redigo/redis/doc.go +++ b/vendor/github.com/garyburd/redigo/redis/doc.go @@ -17,7 +17,7 @@ // The Redigo FAQ (https://github.com/garyburd/redigo/wiki/FAQ) contains more // documentation about this package. // -// Connections +// # Connections // // The Conn interface is the primary interface for working with Redis. // Applications create connections by calling the Dial, DialWithTimeout or @@ -27,58 +27,58 @@ // The application must call the connection Close method when the application // is done with the connection. // -// Executing Commands +// # Executing Commands // // The Conn interface has a generic method for executing Redis commands: // -// Do(commandName string, args ...interface{}) (reply interface{}, err error) +// Do(commandName string, args ...interface{}) (reply interface{}, err error) // // The Redis command reference (http://redis.io/commands) lists the available // commands. An example of using the Redis APPEND command is: // -// n, err := conn.Do("APPEND", "key", "value") +// n, err := conn.Do("APPEND", "key", "value") // -// The Do method converts command arguments to binary strings for transmission +// The Do method converts command arguments to bulk strings for transmission // to the server as follows: // -// Go Type Conversion -// []byte Sent as is -// string Sent as is -// int, int64 strconv.FormatInt(v) -// float64 strconv.FormatFloat(v, 'g', -1, 64) -// bool true -> "1", false -> "0" -// nil "" -// all other types fmt.Print(v) +// Go Type Conversion +// []byte Sent as is +// string Sent as is +// int, int64 strconv.FormatInt(v) +// float64 strconv.FormatFloat(v, 'g', -1, 64) +// bool true -> "1", false -> "0" +// nil "" +// all other types fmt.Fprint(w, v) // // Redis command reply types are represented using the following Go types: // -// Redis type Go type -// error redis.Error -// integer int64 -// simple string string -// bulk string []byte or nil if value not present. -// array []interface{} or nil if value not present. +// Redis type Go type +// error redis.Error +// integer int64 +// simple string string +// bulk string []byte or nil if value not present. +// array []interface{} or nil if value not present. // // Use type assertions or the reply helper functions to convert from // interface{} to the specific Go type for the command result. // -// Pipelining +// # Pipelining // // Connections support pipelining using the Send, Flush and Receive methods. // -// Send(commandName string, args ...interface{}) error -// Flush() error -// Receive() (reply interface{}, err error) +// Send(commandName string, args ...interface{}) error +// Flush() error +// Receive() (reply interface{}, err error) // // Send writes the command to the connection's output buffer. Flush flushes the // connection's output buffer to the server. Receive reads a single reply from // the server. The following example shows a simple pipeline. // -// c.Send("SET", "foo", "bar") -// c.Send("GET", "foo") -// c.Flush() -// c.Receive() // reply from SET -// v, err = c.Receive() // reply from GET +// c.Send("SET", "foo", "bar") +// c.Send("GET", "foo") +// c.Flush() +// c.Receive() // reply from SET +// v, err = c.Receive() // reply from GET // // The Do method combines the functionality of the Send, Flush and Receive // methods. The Do method starts by writing the command and flushing the output @@ -91,57 +91,56 @@ // // Use the Send and Do methods to implement pipelined transactions. // -// c.Send("MULTI") -// c.Send("INCR", "foo") -// c.Send("INCR", "bar") -// r, err := c.Do("EXEC") -// fmt.Println(r) // prints [1, 1] +// c.Send("MULTI") +// c.Send("INCR", "foo") +// c.Send("INCR", "bar") +// r, err := c.Do("EXEC") +// fmt.Println(r) // prints [1, 1] // -// Concurrency +// # Concurrency // -// Connections do not support concurrent calls to the write methods (Send, -// Flush) or concurrent calls to the read method (Receive). Connections do -// allow a concurrent reader and writer. +// Connections support one concurrent caller to the Receive method and one +// concurrent caller to the Send and Flush methods. No other concurrency is +// supported including concurrent calls to the Do method. // -// Because the Do method combines the functionality of Send, Flush and Receive, -// the Do method cannot be called concurrently with the other methods. +// For full concurrent access to Redis, use the thread-safe Pool to get, use +// and release a connection from within a goroutine. Connections returned from +// a Pool have the concurrency restrictions described in the previous +// paragraph. // -// For full concurrent access to Redis, use the thread-safe Pool to get and -// release connections from within a goroutine. -// -// Publish and Subscribe +// # Publish and Subscribe // // Use the Send, Flush and Receive methods to implement Pub/Sub subscribers. // -// c.Send("SUBSCRIBE", "example") -// c.Flush() -// for { -// reply, err := c.Receive() -// if err != nil { -// return err -// } -// // process pushed message -// } +// c.Send("SUBSCRIBE", "example") +// c.Flush() +// for { +// reply, err := c.Receive() +// if err != nil { +// return err +// } +// // process pushed message +// } // // The PubSubConn type wraps a Conn with convenience methods for implementing // subscribers. The Subscribe, PSubscribe, Unsubscribe and PUnsubscribe methods // send and flush a subscription management command. The receive method // converts a pushed message to convenient types for use in a type switch. // -// psc := redis.PubSubConn{c} -// psc.Subscribe("example") -// for { -// switch v := psc.Receive().(type) { -// case redis.Message: -// fmt.Printf("%s: message: %s\n", v.Channel, v.Data) -// case redis.Subscription: -// fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count) -// case error: -// return v -// } -// } -// -// Reply Helpers +// psc := redis.PubSubConn{Conn: c} +// psc.Subscribe("example") +// for { +// switch v := psc.Receive().(type) { +// case redis.Message: +// fmt.Printf("%s: message: %s\n", v.Channel, v.Data) +// case redis.Subscription: +// fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count) +// case error: +// return v +// } +// } +// +// # Reply Helpers // // The Bool, Int, Bytes, String, Strings and Values functions convert a reply // to a value of a specific type. To allow convenient wrapping of calls to the @@ -150,20 +149,29 @@ // error. If the error is nil, the function converts the reply to the specified // type: // -// exists, err := redis.Bool(c.Do("EXISTS", "foo")) -// if err != nil { -// // handle error return from c.Do or type conversion error. -// } +// exists, err := redis.Bool(c.Do("EXISTS", "foo")) +// if err != nil { +// // handle error return from c.Do or type conversion error. +// } // // The Scan function converts elements of a array reply to Go types: // -// var value1 int -// var value2 string -// reply, err := redis.Values(c.Do("MGET", "key1", "key2")) -// if err != nil { -// // handle error -// } -// if _, err := redis.Scan(reply, &value1, &value2); err != nil { -// // handle error -// } +// var value1 int +// var value2 string +// reply, err := redis.Values(c.Do("MGET", "key1", "key2")) +// if err != nil { +// // handle error +// } +// if _, err := redis.Scan(reply, &value1, &value2); err != nil { +// // handle error +// } +// +// # Errors +// +// Connection methods return error replies from the server as type redis.Error. +// +// Call the connection Err() method to determine if the connection encountered +// non-recoverable error such as a network error or protocol parsing error. If +// Err() returns a non-nil value, then the connection is not usable and should +// be closed. package redis // import "github.com/garyburd/redigo/redis" diff --git a/vendor/github.com/garyburd/redigo/redis/go16.go b/vendor/github.com/garyburd/redigo/redis/go16.go new file mode 100644 index 000000000..d83f147eb --- /dev/null +++ b/vendor/github.com/garyburd/redigo/redis/go16.go @@ -0,0 +1,28 @@ +//go:build !go1.7 +// +build !go1.7 + +package redis + +import "crypto/tls" + +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + return &tls.Config{ + Rand: cfg.Rand, + Time: cfg.Time, + Certificates: cfg.Certificates, + NameToCertificate: cfg.NameToCertificate, + GetCertificate: cfg.GetCertificate, + RootCAs: cfg.RootCAs, + NextProtos: cfg.NextProtos, + ServerName: cfg.ServerName, + ClientAuth: cfg.ClientAuth, + ClientCAs: cfg.ClientCAs, + InsecureSkipVerify: cfg.InsecureSkipVerify, + CipherSuites: cfg.CipherSuites, + PreferServerCipherSuites: cfg.PreferServerCipherSuites, + ClientSessionCache: cfg.ClientSessionCache, + MinVersion: cfg.MinVersion, + MaxVersion: cfg.MaxVersion, + CurvePreferences: cfg.CurvePreferences, + } +} diff --git a/vendor/github.com/garyburd/redigo/redis/go17.go b/vendor/github.com/garyburd/redigo/redis/go17.go new file mode 100644 index 000000000..1d51ce5fe --- /dev/null +++ b/vendor/github.com/garyburd/redigo/redis/go17.go @@ -0,0 +1,30 @@ +//go:build go1.7 && !go1.8 +// +build go1.7,!go1.8 + +package redis + +import "crypto/tls" + +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + return &tls.Config{ + Rand: cfg.Rand, + Time: cfg.Time, + Certificates: cfg.Certificates, + NameToCertificate: cfg.NameToCertificate, + GetCertificate: cfg.GetCertificate, + RootCAs: cfg.RootCAs, + NextProtos: cfg.NextProtos, + ServerName: cfg.ServerName, + ClientAuth: cfg.ClientAuth, + ClientCAs: cfg.ClientCAs, + InsecureSkipVerify: cfg.InsecureSkipVerify, + CipherSuites: cfg.CipherSuites, + PreferServerCipherSuites: cfg.PreferServerCipherSuites, + ClientSessionCache: cfg.ClientSessionCache, + MinVersion: cfg.MinVersion, + MaxVersion: cfg.MaxVersion, + CurvePreferences: cfg.CurvePreferences, + DynamicRecordSizingDisabled: cfg.DynamicRecordSizingDisabled, + Renegotiation: cfg.Renegotiation, + } +} diff --git a/vendor/github.com/garyburd/redigo/redis/go18.go b/vendor/github.com/garyburd/redigo/redis/go18.go new file mode 100644 index 000000000..3fa682374 --- /dev/null +++ b/vendor/github.com/garyburd/redigo/redis/go18.go @@ -0,0 +1,10 @@ +//go:build go1.8 +// +build go1.8 + +package redis + +import "crypto/tls" + +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + return cfg.Clone() +} diff --git a/vendor/github.com/garyburd/redigo/redis/log.go b/vendor/github.com/garyburd/redigo/redis/log.go index 129b86d67..b2996611c 100644 --- a/vendor/github.com/garyburd/redigo/redis/log.go +++ b/vendor/github.com/garyburd/redigo/redis/log.go @@ -18,6 +18,11 @@ import ( "bytes" "fmt" "log" + "time" +) + +var ( + _ ConnWithTimeout = (*loggingConn)(nil) ) // NewLoggingConn returns a logging wrapper around a connection. @@ -104,6 +109,12 @@ func (c *loggingConn) Do(commandName string, args ...interface{}) (interface{}, return reply, err } +func (c *loggingConn) DoWithTimeout(timeout time.Duration, commandName string, args ...interface{}) (interface{}, error) { + reply, err := DoWithTimeout(c.Conn, timeout, commandName, args...) + c.print("DoWithTimeout", commandName, args, reply, err) + return reply, err +} + func (c *loggingConn) Send(commandName string, args ...interface{}) error { err := c.Conn.Send(commandName, args...) c.print("Send", commandName, args, nil, err) @@ -115,3 +126,9 @@ func (c *loggingConn) Receive() (interface{}, error) { c.print("Receive", "", nil, reply, err) return reply, err } + +func (c *loggingConn) ReceiveWithTimeout(timeout time.Duration) (interface{}, error) { + reply, err := ReceiveWithTimeout(c.Conn, timeout) + c.print("ReceiveWithTimeout", "", nil, reply, err) + return reply, err +} diff --git a/vendor/github.com/garyburd/redigo/redis/pool.go b/vendor/github.com/garyburd/redigo/redis/pool.go index 9daf2e33f..92afee18c 100644 --- a/vendor/github.com/garyburd/redigo/redis/pool.go +++ b/vendor/github.com/garyburd/redigo/redis/pool.go @@ -16,18 +16,23 @@ package redis import ( "bytes" - "container/list" "crypto/rand" "crypto/sha1" "errors" "io" "strconv" "sync" + "sync/atomic" "time" "github.com/garyburd/redigo/internal" ) +var ( + _ ConnWithTimeout = (*activeConn)(nil) + _ ConnWithTimeout = (*errorConn)(nil) +) + var nowFunc = time.Now // for testing // ErrPoolExhausted is returned from a pool connection method (Do, Send, @@ -46,55 +51,79 @@ var ( // // The following example shows how to use a pool in a web application. The // application creates a pool at application startup and makes it available to -// request handlers using a global variable. +// request handlers using a package level variable. The pool configuration used +// here is an example, not a recommendation. // -// func newPool(server, password string) *redis.Pool { -// return &redis.Pool{ -// MaxIdle: 3, -// IdleTimeout: 240 * time.Second, -// Dial: func () (redis.Conn, error) { -// c, err := redis.Dial("tcp", server) -// if err != nil { -// return nil, err -// } -// if _, err := c.Do("AUTH", password); err != nil { -// c.Close() -// return nil, err -// } -// return c, err -// }, -// TestOnBorrow: func(c redis.Conn, t time.Time) error { -// _, err := c.Do("PING") -// return err -// }, -// } -// } +// func newPool(addr string) *redis.Pool { +// return &redis.Pool{ +// MaxIdle: 3, +// IdleTimeout: 240 * time.Second, +// Dial: func () (redis.Conn, error) { return redis.Dial("tcp", addr) }, +// } +// } // -// var ( -// pool *redis.Pool -// redisServer = flag.String("redisServer", ":6379", "") -// redisPassword = flag.String("redisPassword", "", "") -// ) +// var ( +// pool *redis.Pool +// redisServer = flag.String("redisServer", ":6379", "") +// ) // -// func main() { -// flag.Parse() -// pool = newPool(*redisServer, *redisPassword) -// ... -// } +// func main() { +// flag.Parse() +// pool = newPool(*redisServer) +// ... +// } // // A request handler gets a connection from the pool and closes the connection // when the handler is done: // -// func serveHome(w http.ResponseWriter, r *http.Request) { -// conn := pool.Get() -// defer conn.Close() -// .... -// } +// func serveHome(w http.ResponseWriter, r *http.Request) { +// conn := pool.Get() +// defer conn.Close() +// ... +// } +// +// Use the Dial function to authenticate connections with the AUTH command or +// select a database with the SELECT command: // +// pool := &redis.Pool{ +// // Other pool configuration not shown in this example. +// Dial: func () (redis.Conn, error) { +// c, err := redis.Dial("tcp", server) +// if err != nil { +// return nil, err +// } +// if _, err := c.Do("AUTH", password); err != nil { +// c.Close() +// return nil, err +// } +// if _, err := c.Do("SELECT", db); err != nil { +// c.Close() +// return nil, err +// } +// return c, nil +// }, +// } +// +// Use the TestOnBorrow function to check the health of an idle connection +// before the connection is returned to the application. This example PINGs +// connections that have been idle more than a minute: +// +// pool := &redis.Pool{ +// // Other pool configuration not shown in this example. +// TestOnBorrow: func(c redis.Conn, t time.Time) error { +// if time.Since(t) < time.Minute { +// return nil +// } +// _, err := c.Do("PING") +// return err +// }, +// } type Pool struct { - // Dial is an application supplied function for creating and configuring a - // connection + // connection. + // + // The connection returned from Dial must not be in a special state + // (subscribed to pubsub channel, transaction started, ...). Dial func() (Conn, error) // TestOnBorrow is an optional application supplied function for checking @@ -116,27 +145,26 @@ type Pool struct { // the timeout to a value less than the server's timeout. IdleTimeout time.Duration - // If Wait is true and the pool is at the MaxIdle limit, then Get() waits + // If Wait is true and the pool is at the MaxActive limit, then Get() waits // for a connection to be returned to the pool before returning. Wait bool - // mu protects fields defined below. - mu sync.Mutex - cond *sync.Cond - closed bool - active int + // Close connections older than this duration. If the value is zero, then + // the pool does not close connections based on age. + MaxConnLifetime time.Duration - // Stack of idleConn with most recently used at the front. - idle list.List -} + chInitialized uint32 // set to 1 when field ch is initialized -type idleConn struct { - c Conn - t time.Time + mu sync.Mutex // mu protects the following fields + closed bool // set to true when the pool is closed. + active int // the number of open connections in the pool + ch chan struct{} // limits open connections when p.Wait is true + idle idleList // idle connections } -// NewPool creates a new pool. This function is deprecated. Applications should -// initialize the Pool fields directly as shown in example. +// NewPool creates a new pool. +// +// Deprecated: Initialize the Pool directory as shown in the example. func NewPool(newFn func() (Conn, error), maxIdle int) *Pool { return &Pool{Dial: newFn, MaxIdle: maxIdle} } @@ -147,14 +175,36 @@ func NewPool(newFn func() (Conn, error), maxIdle int) *Pool { // getting an underlying connection, then the connection Err, Do, Send, Flush // and Receive methods return that error. func (p *Pool) Get() Conn { - c, err := p.get() + pc, err := p.get(nil) if err != nil { - return errorConnection{err} + return errorConn{err} } - return &pooledConnection{p: p, c: c} + return &activeConn{p: p, pc: pc} +} + +// PoolStats contains pool statistics. +type PoolStats struct { + // ActiveCount is the number of connections in the pool. The count includes + // idle connections and connections in use. + ActiveCount int + // IdleCount is the number of idle connections in the pool. + IdleCount int } -// ActiveCount returns the number of active connections in the pool. +// Stats returns pool's statistics. +func (p *Pool) Stats() PoolStats { + p.mu.Lock() + stats := PoolStats{ + ActiveCount: p.active, + IdleCount: p.idle.count, + } + p.mu.Unlock() + + return stats +} + +// ActiveCount returns the number of connections in the pool. The count +// includes idle connections and connections in use. func (p *Pool) ActiveCount() int { p.mu.Lock() active := p.active @@ -162,141 +212,164 @@ func (p *Pool) ActiveCount() int { return active } +// IdleCount returns the number of idle connections in the pool. +func (p *Pool) IdleCount() int { + p.mu.Lock() + idle := p.idle.count + p.mu.Unlock() + return idle +} + // Close releases the resources used by the pool. func (p *Pool) Close() error { p.mu.Lock() - idle := p.idle - p.idle.Init() + if p.closed { + p.mu.Unlock() + return nil + } p.closed = true - p.active -= idle.Len() - if p.cond != nil { - p.cond.Broadcast() + p.active -= p.idle.count + pc := p.idle.front + p.idle.count = 0 + p.idle.front, p.idle.back = nil, nil + if p.ch != nil { + close(p.ch) } p.mu.Unlock() - for e := idle.Front(); e != nil; e = e.Next() { - e.Value.(idleConn).c.Close() + for ; pc != nil; pc = pc.next { + pc.c.Close() } return nil } -// release decrements the active count and signals waiters. The caller must -// hold p.mu during the call. -func (p *Pool) release() { - p.active -= 1 - if p.cond != nil { - p.cond.Signal() +func (p *Pool) lazyInit() { + // Fast path. + if atomic.LoadUint32(&p.chInitialized) == 1 { + return + } + // Slow path. + p.mu.Lock() + if p.chInitialized == 0 { + p.ch = make(chan struct{}, p.MaxActive) + if p.closed { + close(p.ch) + } else { + for i := 0; i < p.MaxActive; i++ { + p.ch <- struct{}{} + } + } + atomic.StoreUint32(&p.chInitialized, 1) } + p.mu.Unlock() } // get prunes stale connections and returns a connection from the idle list or // creates a new connection. -func (p *Pool) get() (Conn, error) { - p.mu.Lock() - - // Prune stale connections. - - if timeout := p.IdleTimeout; timeout > 0 { - for i, n := 0, p.idle.Len(); i < n; i++ { - e := p.idle.Back() - if e == nil { - break - } - ic := e.Value.(idleConn) - if ic.t.Add(timeout).After(nowFunc()) { - break +func (p *Pool) get(ctx interface { + Done() <-chan struct{} + Err() error +}) (*poolConn, error) { + + // Handle limit for p.Wait == true. + if p.Wait && p.MaxActive > 0 { + p.lazyInit() + if ctx == nil { + <-p.ch + } else { + select { + case <-p.ch: + case <-ctx.Done(): + return nil, ctx.Err() } - p.idle.Remove(e) - p.release() - p.mu.Unlock() - ic.c.Close() - p.mu.Lock() } } - for { - - // Get idle connection. + p.mu.Lock() - for i, n := 0, p.idle.Len(); i < n; i++ { - e := p.idle.Front() - if e == nil { - break - } - ic := e.Value.(idleConn) - p.idle.Remove(e) - test := p.TestOnBorrow + // Prune stale connections at the back of the idle list. + if p.IdleTimeout > 0 { + n := p.idle.count + for i := 0; i < n && p.idle.back != nil && p.idle.back.t.Add(p.IdleTimeout).Before(nowFunc()); i++ { + pc := p.idle.back + p.idle.popBack() p.mu.Unlock() - if test == nil || test(ic.c, ic.t) == nil { - return ic.c, nil - } - ic.c.Close() + pc.c.Close() p.mu.Lock() - p.release() + p.active-- } + } - // Check for pool closed before dialing a new connection. - - if p.closed { - p.mu.Unlock() - return nil, errors.New("redigo: get on closed pool") + // Get idle connection from the front of idle list. + for p.idle.front != nil { + pc := p.idle.front + p.idle.popFront() + p.mu.Unlock() + if (p.TestOnBorrow == nil || p.TestOnBorrow(pc.c, pc.t) == nil) && + (p.MaxConnLifetime == 0 || nowFunc().Sub(pc.created) < p.MaxConnLifetime) { + return pc, nil } + pc.c.Close() + p.mu.Lock() + p.active-- + } - // Dial new connection if under limit. - - if p.MaxActive == 0 || p.active < p.MaxActive { - dial := p.Dial - p.active += 1 - p.mu.Unlock() - c, err := dial() - if err != nil { - p.mu.Lock() - p.release() - p.mu.Unlock() - c = nil - } - return c, err - } + // Check for pool closed before dialing a new connection. + if p.closed { + p.mu.Unlock() + return nil, errors.New("redigo: get on closed pool") + } - if !p.Wait { - p.mu.Unlock() - return nil, ErrPoolExhausted - } + // Handle limit for p.Wait == false. + if !p.Wait && p.MaxActive > 0 && p.active >= p.MaxActive { + p.mu.Unlock() + return nil, ErrPoolExhausted + } - if p.cond == nil { - p.cond = sync.NewCond(&p.mu) + p.active++ + p.mu.Unlock() + c, err := p.Dial() + if err != nil { + c = nil + p.mu.Lock() + p.active-- + if p.ch != nil && !p.closed { + p.ch <- struct{}{} } - p.cond.Wait() + p.mu.Unlock() } + return &poolConn{c: c, created: nowFunc()}, err } -func (p *Pool) put(c Conn, forceClose bool) error { - err := c.Err() +func (p *Pool) put(pc *poolConn, forceClose bool) error { p.mu.Lock() - if !p.closed && err == nil && !forceClose { - p.idle.PushFront(idleConn{t: nowFunc(), c: c}) - if p.idle.Len() > p.MaxIdle { - c = p.idle.Remove(p.idle.Back()).(idleConn).c + if !p.closed && !forceClose { + pc.t = nowFunc() + p.idle.pushFront(pc) + if p.idle.count > p.MaxIdle { + pc = p.idle.back + p.idle.popBack() } else { - c = nil + pc = nil } } - if c == nil { - if p.cond != nil { - p.cond.Signal() - } + if pc != nil { p.mu.Unlock() - return nil + pc.c.Close() + p.mu.Lock() + p.active-- } - p.release() + if p.ch != nil && !p.closed { + p.ch <- struct{}{} + } p.mu.Unlock() - return c.Close() + return nil } -type pooledConnection struct { +type activeConn struct { p *Pool - c Conn + pc *poolConn state int } @@ -317,73 +390,172 @@ func initSentinel() { } } -func (pc *pooledConnection) Close() error { - c := pc.c - if _, ok := c.(errorConnection); ok { +func (ac *activeConn) Close() error { + pc := ac.pc + if pc == nil { return nil } - pc.c = errorConnection{errConnClosed} - - if pc.state&internal.MultiState != 0 { - c.Send("DISCARD") - pc.state &^= (internal.MultiState | internal.WatchState) - } else if pc.state&internal.WatchState != 0 { - c.Send("UNWATCH") - pc.state &^= internal.WatchState + ac.pc = nil + + if ac.state&internal.MultiState != 0 { + pc.c.Send("DISCARD") + ac.state &^= (internal.MultiState | internal.WatchState) + } else if ac.state&internal.WatchState != 0 { + pc.c.Send("UNWATCH") + ac.state &^= internal.WatchState } - if pc.state&internal.SubscribeState != 0 { - c.Send("UNSUBSCRIBE") - c.Send("PUNSUBSCRIBE") + if ac.state&internal.SubscribeState != 0 { + pc.c.Send("UNSUBSCRIBE") + pc.c.Send("PUNSUBSCRIBE") // To detect the end of the message stream, ask the server to echo // a sentinel value and read until we see that value. sentinelOnce.Do(initSentinel) - c.Send("ECHO", sentinel) - c.Flush() + pc.c.Send("ECHO", sentinel) + pc.c.Flush() for { - p, err := c.Receive() + p, err := pc.c.Receive() if err != nil { break } if p, ok := p.([]byte); ok && bytes.Equal(p, sentinel) { - pc.state &^= internal.SubscribeState + ac.state &^= internal.SubscribeState break } } } - c.Do("") - pc.p.put(c, pc.state != 0) + pc.c.Do("") + ac.p.put(pc, ac.state != 0 || pc.c.Err() != nil) return nil } -func (pc *pooledConnection) Err() error { +func (ac *activeConn) Err() error { + pc := ac.pc + if pc == nil { + return errConnClosed + } return pc.c.Err() } -func (pc *pooledConnection) Do(commandName string, args ...interface{}) (reply interface{}, err error) { +func (ac *activeConn) Do(commandName string, args ...interface{}) (reply interface{}, err error) { + pc := ac.pc + if pc == nil { + return nil, errConnClosed + } ci := internal.LookupCommandInfo(commandName) - pc.state = (pc.state | ci.Set) &^ ci.Clear + ac.state = (ac.state | ci.Set) &^ ci.Clear return pc.c.Do(commandName, args...) } -func (pc *pooledConnection) Send(commandName string, args ...interface{}) error { +func (ac *activeConn) DoWithTimeout(timeout time.Duration, commandName string, args ...interface{}) (reply interface{}, err error) { + pc := ac.pc + if pc == nil { + return nil, errConnClosed + } + cwt, ok := pc.c.(ConnWithTimeout) + if !ok { + return nil, errTimeoutNotSupported + } + ci := internal.LookupCommandInfo(commandName) + ac.state = (ac.state | ci.Set) &^ ci.Clear + return cwt.DoWithTimeout(timeout, commandName, args...) +} + +func (ac *activeConn) Send(commandName string, args ...interface{}) error { + pc := ac.pc + if pc == nil { + return errConnClosed + } ci := internal.LookupCommandInfo(commandName) - pc.state = (pc.state | ci.Set) &^ ci.Clear + ac.state = (ac.state | ci.Set) &^ ci.Clear return pc.c.Send(commandName, args...) } -func (pc *pooledConnection) Flush() error { +func (ac *activeConn) Flush() error { + pc := ac.pc + if pc == nil { + return errConnClosed + } return pc.c.Flush() } -func (pc *pooledConnection) Receive() (reply interface{}, err error) { +func (ac *activeConn) Receive() (reply interface{}, err error) { + pc := ac.pc + if pc == nil { + return nil, errConnClosed + } return pc.c.Receive() } -type errorConnection struct{ err error } +func (ac *activeConn) ReceiveWithTimeout(timeout time.Duration) (reply interface{}, err error) { + pc := ac.pc + if pc == nil { + return nil, errConnClosed + } + cwt, ok := pc.c.(ConnWithTimeout) + if !ok { + return nil, errTimeoutNotSupported + } + return cwt.ReceiveWithTimeout(timeout) +} + +type errorConn struct{ err error } + +func (ec errorConn) Do(string, ...interface{}) (interface{}, error) { return nil, ec.err } +func (ec errorConn) DoWithTimeout(time.Duration, string, ...interface{}) (interface{}, error) { + return nil, ec.err +} +func (ec errorConn) Send(string, ...interface{}) error { return ec.err } +func (ec errorConn) Err() error { return ec.err } +func (ec errorConn) Close() error { return nil } +func (ec errorConn) Flush() error { return ec.err } +func (ec errorConn) Receive() (interface{}, error) { return nil, ec.err } +func (ec errorConn) ReceiveWithTimeout(time.Duration) (interface{}, error) { return nil, ec.err } + +type idleList struct { + count int + front, back *poolConn +} -func (ec errorConnection) Do(string, ...interface{}) (interface{}, error) { return nil, ec.err } -func (ec errorConnection) Send(string, ...interface{}) error { return ec.err } -func (ec errorConnection) Err() error { return ec.err } -func (ec errorConnection) Close() error { return ec.err } -func (ec errorConnection) Flush() error { return ec.err } -func (ec errorConnection) Receive() (interface{}, error) { return nil, ec.err } +type poolConn struct { + c Conn + t time.Time + created time.Time + next, prev *poolConn +} + +func (l *idleList) pushFront(pc *poolConn) { + pc.next = l.front + pc.prev = nil + if l.count == 0 { + l.back = pc + } else { + l.front.prev = pc + } + l.front = pc + l.count++ + return +} + +func (l *idleList) popFront() { + pc := l.front + l.count-- + if l.count == 0 { + l.front, l.back = nil, nil + } else { + pc.next.prev = nil + l.front = pc.next + } + pc.next, pc.prev = nil, nil +} + +func (l *idleList) popBack() { + pc := l.back + l.count-- + if l.count == 0 { + l.front, l.back = nil, nil + } else { + pc.prev.next = nil + l.back = pc.prev + } + pc.next, pc.prev = nil, nil +} diff --git a/vendor/github.com/garyburd/redigo/redis/pool17.go b/vendor/github.com/garyburd/redigo/redis/pool17.go new file mode 100644 index 000000000..830ad92ad --- /dev/null +++ b/vendor/github.com/garyburd/redigo/redis/pool17.go @@ -0,0 +1,36 @@ +// Copyright 2018 Gary Burd +// +// Licensed under the Apache License, Version 2.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:build go1.7 +// +build go1.7 + +package redis + +import "context" + +// GetContext gets a connection using the provided context. +// +// The provided Context must be non-nil. If the context expires before the +// connection is complete, an error is returned. Any expiration on the context +// will not affect the returned connection. +// +// If the function completes without error, then the application must close the +// returned connection. +func (p *Pool) GetContext(ctx context.Context) (Conn, error) { + pc, err := p.get(ctx) + if err != nil { + return errorConn{err}, err + } + return &activeConn{p: p, pc: pc}, nil +} diff --git a/vendor/github.com/garyburd/redigo/redis/pubsub.go b/vendor/github.com/garyburd/redigo/redis/pubsub.go index f0790429f..f0ac82532 100644 --- a/vendor/github.com/garyburd/redigo/redis/pubsub.go +++ b/vendor/github.com/garyburd/redigo/redis/pubsub.go @@ -16,11 +16,11 @@ package redis import ( "errors" + "time" ) // Subscription represents a subscribe or unsubscribe notification. type Subscription struct { - // Kind is "subscribe", "unsubscribe", "psubscribe" or "punsubscribe" Kind string @@ -33,7 +33,6 @@ type Subscription struct { // Message represents a message notification. type Message struct { - // The originating channel. Channel string @@ -43,7 +42,6 @@ type Message struct { // PMessage represents a pmessage notification. type PMessage struct { - // The matched pattern. Pattern string @@ -54,6 +52,11 @@ type PMessage struct { Data []byte } +// Pong represents a pubsub pong notification. +type Pong struct { + Data string +} + // PubSubConn wraps a Conn with convenience methods for subscribers. type PubSubConn struct { Conn Conn @@ -90,11 +93,30 @@ func (c PubSubConn) PUnsubscribe(channel ...interface{}) error { return c.Conn.Flush() } -// Receive returns a pushed message as a Subscription, Message, PMessage or -// error. The return value is intended to be used directly in a type switch as -// illustrated in the PubSubConn example. +// Ping sends a PING to the server with the specified data. +// +// The connection must be subscribed to at least one channel or pattern when +// calling this method. +func (c PubSubConn) Ping(data string) error { + c.Conn.Send("PING", data) + return c.Conn.Flush() +} + +// Receive returns a pushed message as a Subscription, Message, PMessage, Pong +// or error. The return value is intended to be used directly in a type switch +// as illustrated in the PubSubConn example. func (c PubSubConn) Receive() interface{} { - reply, err := Values(c.Conn.Receive()) + return c.receiveInternal(c.Conn.Receive()) +} + +// ReceiveWithTimeout is like Receive, but it allows the application to +// override the connection's default timeout. +func (c PubSubConn) ReceiveWithTimeout(timeout time.Duration) interface{} { + return c.receiveInternal(ReceiveWithTimeout(c.Conn, timeout)) +} + +func (c PubSubConn) receiveInternal(replyArg interface{}, errArg error) interface{} { + reply, err := Values(replyArg, errArg) if err != nil { return err } @@ -124,6 +146,12 @@ func (c PubSubConn) Receive() interface{} { return err } return s + case "pong": + var p Pong + if _, err := Scan(reply, &p.Data); err != nil { + return err + } + return p } return errors.New("redigo: unknown pubsub notification") } diff --git a/vendor/github.com/garyburd/redigo/redis/redis.go b/vendor/github.com/garyburd/redigo/redis/redis.go index c90a48ed4..68ad44df7 100644 --- a/vendor/github.com/garyburd/redigo/redis/redis.go +++ b/vendor/github.com/garyburd/redigo/redis/redis.go @@ -14,20 +14,24 @@ package redis +import ( + "errors" + "time" +) + // Error represents an error returned in a command reply. type Error string func (err Error) Error() string { return string(err) } // Conn represents a connection to a Redis server. +// +// Deprecated: This package is replaced by github.com/gomodule/redigo/redis. type Conn interface { // Close closes the connection. Close() error - // Err returns a non-nil value if the connection is broken. The returned - // value is either the first non-nil value returned from the underlying - // network connection or a protocol parsing error. Applications should - // close broken connections. + // Err returns a non-nil value when the connection is not usable. Err() error // Do sends a command to the server and returns the received reply. @@ -42,3 +46,74 @@ type Conn interface { // Receive receives a single reply from the Redis server Receive() (reply interface{}, err error) } + +// Argument is the interface implemented by an object which wants to control how +// the object is converted to Redis bulk strings. +type Argument interface { + // RedisArg returns a value to be encoded as a bulk string per the + // conversions listed in the section 'Executing Commands'. + // Implementations should typically return a []byte or string. + RedisArg() interface{} +} + +// Scanner is implemented by an object which wants to control its value is +// interpreted when read from Redis. +type Scanner interface { + // RedisScan assigns a value from a Redis value. The argument src is one of + // the reply types listed in the section `Executing Commands`. + // + // An error should be returned if the value cannot be stored without + // loss of information. + RedisScan(src interface{}) error +} + +// ConnWithTimeout is an optional interface that allows the caller to override +// a connection's default read timeout. This interface is useful for executing +// the BLPOP, BRPOP, BRPOPLPUSH, XREAD and other commands that block at the +// server. +// +// A connection's default read timeout is set with the DialReadTimeout dial +// option. Applications should rely on the default timeout for commands that do +// not block at the server. +// +// All of the Conn implementations in this package satisfy the ConnWithTimeout +// interface. +// +// Use the DoWithTimeout and ReceiveWithTimeout helper functions to simplify +// use of this interface. +type ConnWithTimeout interface { + Conn + + // Do sends a command to the server and returns the received reply. + // The timeout overrides the read timeout set when dialing the + // connection. + DoWithTimeout(timeout time.Duration, commandName string, args ...interface{}) (reply interface{}, err error) + + // Receive receives a single reply from the Redis server. The timeout + // overrides the read timeout set when dialing the connection. + ReceiveWithTimeout(timeout time.Duration) (reply interface{}, err error) +} + +var errTimeoutNotSupported = errors.New("redis: connection does not support ConnWithTimeout") + +// DoWithTimeout executes a Redis command with the specified read timeout. If +// the connection does not satisfy the ConnWithTimeout interface, then an error +// is returned. +func DoWithTimeout(c Conn, timeout time.Duration, cmd string, args ...interface{}) (interface{}, error) { + cwt, ok := c.(ConnWithTimeout) + if !ok { + return nil, errTimeoutNotSupported + } + return cwt.DoWithTimeout(timeout, cmd, args...) +} + +// ReceiveWithTimeout receives a reply with the specified read timeout. If the +// connection does not satisfy the ConnWithTimeout interface, then an error is +// returned. +func ReceiveWithTimeout(c Conn, timeout time.Duration) (interface{}, error) { + cwt, ok := c.(ConnWithTimeout) + if !ok { + return nil, errTimeoutNotSupported + } + return cwt.ReceiveWithTimeout(timeout) +} diff --git a/vendor/github.com/garyburd/redigo/redis/reply.go b/vendor/github.com/garyburd/redigo/redis/reply.go index 5648f930d..0874d31df 100644 --- a/vendor/github.com/garyburd/redigo/redis/reply.go +++ b/vendor/github.com/garyburd/redigo/redis/reply.go @@ -27,11 +27,11 @@ var ErrNil = errors.New("redigo: nil returned") // equal to nil, then Int returns 0, err. Otherwise, Int converts the // reply to an int as follows: // -// Reply type Result -// integer int(reply), nil -// bulk string parsed reply, nil -// nil 0, ErrNil -// other 0, error +// Reply type Result +// integer int(reply), nil +// bulk string parsed reply, nil +// nil 0, ErrNil +// other 0, error func Int(reply interface{}, err error) (int, error) { if err != nil { return 0, err @@ -58,11 +58,11 @@ func Int(reply interface{}, err error) (int, error) { // not equal to nil, then Int returns 0, err. Otherwise, Int64 converts the // reply to an int64 as follows: // -// Reply type Result -// integer reply, nil -// bulk string parsed reply, nil -// nil 0, ErrNil -// other 0, error +// Reply type Result +// integer reply, nil +// bulk string parsed reply, nil +// nil 0, ErrNil +// other 0, error func Int64(reply interface{}, err error) (int64, error) { if err != nil { return 0, err @@ -87,11 +87,11 @@ var errNegativeInt = errors.New("redigo: unexpected value for Uint64") // not equal to nil, then Int returns 0, err. Otherwise, Int64 converts the // reply to an int64 as follows: // -// Reply type Result -// integer reply, nil -// bulk string parsed reply, nil -// nil 0, ErrNil -// other 0, error +// Reply type Result +// integer reply, nil +// bulk string parsed reply, nil +// nil 0, ErrNil +// other 0, error func Uint64(reply interface{}, err error) (uint64, error) { if err != nil { return 0, err @@ -117,10 +117,10 @@ func Uint64(reply interface{}, err error) (uint64, error) { // not equal to nil, then Float64 returns 0, err. Otherwise, Float64 converts // the reply to an int as follows: // -// Reply type Result -// bulk string parsed reply, nil -// nil 0, ErrNil -// other 0, error +// Reply type Result +// bulk string parsed reply, nil +// nil 0, ErrNil +// other 0, error func Float64(reply interface{}, err error) (float64, error) { if err != nil { return 0, err @@ -141,11 +141,11 @@ func Float64(reply interface{}, err error) (float64, error) { // equal to nil, then String returns "", err. Otherwise String converts the // reply to a string as follows: // -// Reply type Result -// bulk string string(reply), nil -// simple string reply, nil -// nil "", ErrNil -// other "", error +// Reply type Result +// bulk string string(reply), nil +// simple string reply, nil +// nil "", ErrNil +// other "", error func String(reply interface{}, err error) (string, error) { if err != nil { return "", err @@ -167,11 +167,11 @@ func String(reply interface{}, err error) (string, error) { // is not equal to nil, then Bytes returns nil, err. Otherwise Bytes converts // the reply to a slice of bytes as follows: // -// Reply type Result -// bulk string reply, nil -// simple string []byte(reply), nil -// nil nil, ErrNil -// other nil, error +// Reply type Result +// bulk string reply, nil +// simple string []byte(reply), nil +// nil nil, ErrNil +// other nil, error func Bytes(reply interface{}, err error) ([]byte, error) { if err != nil { return nil, err @@ -193,11 +193,11 @@ func Bytes(reply interface{}, err error) ([]byte, error) { // equal to nil, then Bool returns false, err. Otherwise Bool converts the // reply to boolean as follows: // -// Reply type Result -// integer value != 0, nil -// bulk string strconv.ParseBool(reply) -// nil false, ErrNil -// other false, error +// Reply type Result +// integer value != 0, nil +// bulk string strconv.ParseBool(reply) +// nil false, ErrNil +// other false, error func Bool(reply interface{}, err error) (bool, error) { if err != nil { return false, err @@ -215,17 +215,19 @@ func Bool(reply interface{}, err error) (bool, error) { return false, fmt.Errorf("redigo: unexpected type for Bool, got type %T", reply) } -// MultiBulk is deprecated. Use Values. +// MultiBulk is a helper that converts an array command reply to a []interface{}. +// +// Deprecated: Use Values instead. func MultiBulk(reply interface{}, err error) ([]interface{}, error) { return Values(reply, err) } // Values is a helper that converts an array command reply to a []interface{}. // If err is not equal to nil, then Values returns nil, err. Otherwise, Values // converts the reply as follows: // -// Reply type Result -// array reply, nil -// nil nil, ErrNil -// other nil, error +// Reply type Result +// array reply, nil +// nil nil, ErrNil +// other nil, error func Values(reply interface{}, err error) ([]interface{}, error) { if err != nil { return nil, err @@ -241,51 +243,132 @@ func Values(reply interface{}, err error) ([]interface{}, error) { return nil, fmt.Errorf("redigo: unexpected type for Values, got type %T", reply) } -// Strings is a helper that converts an array command reply to a []string. If -// err is not equal to nil, then Strings returns nil, err. Nil array items are -// converted to "" in the output slice. Strings returns an error if an array -// item is not a bulk string or nil. -func Strings(reply interface{}, err error) ([]string, error) { +func sliceHelper(reply interface{}, err error, name string, makeSlice func(int), assign func(int, interface{}) error) error { if err != nil { - return nil, err + return err } switch reply := reply.(type) { case []interface{}: - result := make([]string, len(reply)) + makeSlice(len(reply)) for i := range reply { if reply[i] == nil { continue } - p, ok := reply[i].([]byte) - if !ok { - return nil, fmt.Errorf("redigo: unexpected element type for Strings, got type %T", reply[i]) + if err := assign(i, reply[i]); err != nil { + return err } - result[i] = string(p) } - return result, nil + return nil case nil: - return nil, ErrNil + return ErrNil case Error: - return nil, reply + return reply } - return nil, fmt.Errorf("redigo: unexpected type for Strings, got type %T", reply) + return fmt.Errorf("redigo: unexpected type for %s, got type %T", name, reply) } -// Ints is a helper that converts an array command reply to a []int. If -// err is not equal to nil, then Ints returns nil, err. +// Float64s is a helper that converts an array command reply to a []float64. If +// err is not equal to nil, then Float64s returns nil, err. Nil array items are +// converted to 0 in the output slice. Floats64 returns an error if an array +// item is not a bulk string or nil. +func Float64s(reply interface{}, err error) ([]float64, error) { + var result []float64 + err = sliceHelper(reply, err, "Float64s", func(n int) { result = make([]float64, n) }, func(i int, v interface{}) error { + p, ok := v.([]byte) + if !ok { + return fmt.Errorf("redigo: unexpected element type for Floats64, got type %T", v) + } + f, err := strconv.ParseFloat(string(p), 64) + result[i] = f + return err + }) + return result, err +} + +// Strings is a helper that converts an array command reply to a []string. If +// err is not equal to nil, then Strings returns nil, err. Nil array items are +// converted to "" in the output slice. Strings returns an error if an array +// item is not a bulk string or nil. +func Strings(reply interface{}, err error) ([]string, error) { + var result []string + err = sliceHelper(reply, err, "Strings", func(n int) { result = make([]string, n) }, func(i int, v interface{}) error { + switch v := v.(type) { + case string: + result[i] = v + return nil + case []byte: + result[i] = string(v) + return nil + default: + return fmt.Errorf("redigo: unexpected element type for Strings, got type %T", v) + } + }) + return result, err +} + +// ByteSlices is a helper that converts an array command reply to a [][]byte. +// If err is not equal to nil, then ByteSlices returns nil, err. Nil array +// items are stay nil. ByteSlices returns an error if an array item is not a +// bulk string or nil. +func ByteSlices(reply interface{}, err error) ([][]byte, error) { + var result [][]byte + err = sliceHelper(reply, err, "ByteSlices", func(n int) { result = make([][]byte, n) }, func(i int, v interface{}) error { + p, ok := v.([]byte) + if !ok { + return fmt.Errorf("redigo: unexpected element type for ByteSlices, got type %T", v) + } + result[i] = p + return nil + }) + return result, err +} + +// Int64s is a helper that converts an array command reply to a []int64. +// If err is not equal to nil, then Int64s returns nil, err. Nil array +// items are stay nil. Int64s returns an error if an array item is not a +// bulk string or nil. +func Int64s(reply interface{}, err error) ([]int64, error) { + var result []int64 + err = sliceHelper(reply, err, "Int64s", func(n int) { result = make([]int64, n) }, func(i int, v interface{}) error { + switch v := v.(type) { + case int64: + result[i] = v + return nil + case []byte: + n, err := strconv.ParseInt(string(v), 10, 64) + result[i] = n + return err + default: + return fmt.Errorf("redigo: unexpected element type for Int64s, got type %T", v) + } + }) + return result, err +} + +// Ints is a helper that converts an array command reply to a []in. +// If err is not equal to nil, then Ints returns nil, err. Nil array +// items are stay nil. Ints returns an error if an array item is not a +// bulk string or nil. func Ints(reply interface{}, err error) ([]int, error) { - var ints []int - if reply == nil { - return ints, ErrNil - } - values, err := Values(reply, err) - if err != nil { - return ints, err - } - if err := ScanSlice(values, &ints); err != nil { - return ints, err - } - return ints, nil + var result []int + err = sliceHelper(reply, err, "Ints", func(n int) { result = make([]int, n) }, func(i int, v interface{}) error { + switch v := v.(type) { + case int64: + n := int(v) + if int64(n) != v { + return strconv.ErrRange + } + result[i] = n + return nil + case []byte: + n, err := strconv.Atoi(string(v)) + result[i] = n + return err + default: + return fmt.Errorf("redigo: unexpected element type for Ints, got type %T", v) + } + }) + return result, err } // StringMap is a helper that converts an array of strings (alternating key, value) @@ -304,9 +387,93 @@ func StringMap(result interface{}, err error) (map[string]string, error) { key, okKey := values[i].([]byte) value, okValue := values[i+1].([]byte) if !okKey || !okValue { - return nil, errors.New("redigo: ScanMap key not a bulk string value") + return nil, errors.New("redigo: StringMap key not a bulk string value") } m[string(key)] = string(value) } return m, nil } + +// IntMap is a helper that converts an array of strings (alternating key, value) +// into a map[string]int. The HGETALL commands return replies in this format. +// Requires an even number of values in result. +func IntMap(result interface{}, err error) (map[string]int, error) { + values, err := Values(result, err) + if err != nil { + return nil, err + } + if len(values)%2 != 0 { + return nil, errors.New("redigo: IntMap expects even number of values result") + } + m := make(map[string]int, len(values)/2) + for i := 0; i < len(values); i += 2 { + key, ok := values[i].([]byte) + if !ok { + return nil, errors.New("redigo: IntMap key not a bulk string value") + } + value, err := Int(values[i+1], nil) + if err != nil { + return nil, err + } + m[string(key)] = value + } + return m, nil +} + +// Int64Map is a helper that converts an array of strings (alternating key, value) +// into a map[string]int64. The HGETALL commands return replies in this format. +// Requires an even number of values in result. +func Int64Map(result interface{}, err error) (map[string]int64, error) { + values, err := Values(result, err) + if err != nil { + return nil, err + } + if len(values)%2 != 0 { + return nil, errors.New("redigo: Int64Map expects even number of values result") + } + m := make(map[string]int64, len(values)/2) + for i := 0; i < len(values); i += 2 { + key, ok := values[i].([]byte) + if !ok { + return nil, errors.New("redigo: Int64Map key not a bulk string value") + } + value, err := Int64(values[i+1], nil) + if err != nil { + return nil, err + } + m[string(key)] = value + } + return m, nil +} + +// Positions is a helper that converts an array of positions (lat, long) +// into a [][2]float64. The GEOPOS command returns replies in this format. +func Positions(result interface{}, err error) ([]*[2]float64, error) { + values, err := Values(result, err) + if err != nil { + return nil, err + } + positions := make([]*[2]float64, len(values)) + for i := range values { + if values[i] == nil { + continue + } + p, ok := values[i].([]interface{}) + if !ok { + return nil, fmt.Errorf("redigo: unexpected element type for interface slice, got type %T", values[i]) + } + if len(p) != 2 { + return nil, fmt.Errorf("redigo: unexpected number of values for a member position, got %d", len(p)) + } + lat, err := Float64(p[0], nil) + if err != nil { + return nil, err + } + long, err := Float64(p[1], nil) + if err != nil { + return nil, err + } + positions[i] = &[2]float64{lat, long} + } + return positions, nil +} diff --git a/vendor/github.com/garyburd/redigo/redis/scan.go b/vendor/github.com/garyburd/redigo/redis/scan.go index 8c9cfa18d..9f6e558b8 100644 --- a/vendor/github.com/garyburd/redigo/redis/scan.go +++ b/vendor/github.com/garyburd/redigo/redis/scan.go @@ -32,11 +32,25 @@ func ensureLen(d reflect.Value, n int) { } func cannotConvert(d reflect.Value, s interface{}) error { - return fmt.Errorf("redigo: Scan cannot convert from %s to %s", - reflect.TypeOf(s), d.Type()) + var sname string + switch s.(type) { + case string: + sname = "Redis simple string" + case Error: + sname = "Redis error" + case int64: + sname = "Redis integer" + case []byte: + sname = "Redis bulk string" + case []interface{}: + sname = "Redis array" + default: + sname = reflect.TypeOf(s).String() + } + return fmt.Errorf("cannot convert from %s to %s", sname, d.Type()) } -func convertAssignBytes(d reflect.Value, s []byte) (err error) { +func convertAssignBulkString(d reflect.Value, s []byte) (err error) { switch d.Type().Kind() { case reflect.Float32, reflect.Float64: var x float64 @@ -96,9 +110,28 @@ func convertAssignInt(d reflect.Value, s int64) (err error) { } func convertAssignValue(d reflect.Value, s interface{}) (err error) { + if d.Kind() != reflect.Ptr { + if d.CanAddr() { + d2 := d.Addr() + if d2.CanInterface() { + if scanner, ok := d2.Interface().(Scanner); ok { + return scanner.RedisScan(s) + } + } + } + } else if d.CanInterface() { + // Already a reflect.Ptr + if d.IsNil() { + d.Set(reflect.New(d.Type().Elem())) + } + if scanner, ok := d.Interface().(Scanner); ok { + return scanner.RedisScan(s) + } + } + switch s := s.(type) { case []byte: - err = convertAssignBytes(d, s) + err = convertAssignBulkString(d, s) case int64: err = convertAssignInt(d, s) default: @@ -107,7 +140,7 @@ func convertAssignValue(d reflect.Value, s interface{}) (err error) { return err } -func convertAssignValues(d reflect.Value, s []interface{}) error { +func convertAssignArray(d reflect.Value, s []interface{}) error { if d.Type().Kind() != reflect.Slice { return cannotConvert(d, s) } @@ -121,11 +154,15 @@ func convertAssignValues(d reflect.Value, s []interface{}) error { } func convertAssign(d interface{}, s interface{}) (err error) { + if scanner, ok := d.(Scanner); ok { + return scanner.RedisScan(s) + } + // Handle the most common destination types using type switches and // fall back to reflection for all other types. switch s := s.(type) { case nil: - // ingore + // ignore case []byte: switch d := d.(type) { case *string: @@ -144,7 +181,7 @@ func convertAssign(d interface{}, s interface{}) (err error) { if d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr { err = cannotConvert(d, s) } else { - err = convertAssignBytes(d.Elem(), s) + err = convertAssignBulkString(d.Elem(), s) } } case int64: @@ -169,6 +206,17 @@ func convertAssign(d interface{}, s interface{}) (err error) { err = convertAssignInt(d.Elem(), s) } } + case string: + switch d := d.(type) { + case *string: + *d = s + case *interface{}: + *d = s + case nil: + // skip value + default: + err = cannotConvert(reflect.ValueOf(d), s) + } case []interface{}: switch d := d.(type) { case *[]interface{}: @@ -181,7 +229,7 @@ func convertAssign(d interface{}, s interface{}) (err error) { if d := reflect.ValueOf(d); d.Type().Kind() != reflect.Ptr { err = cannotConvert(d, s) } else { - err = convertAssignValues(d.Elem(), s) + err = convertAssignArray(d.Elem(), s) } } case Error: @@ -194,6 +242,8 @@ func convertAssign(d interface{}, s interface{}) (err error) { // Scan copies from src to the values pointed at by dest. // +// Scan uses RedisScan if available otherwise: +// // The values pointed at by dest must be an integer, float, boolean, string, // []byte, interface{} or slices of these types. Scan uses the standard strconv // package to convert bulk strings to numeric and boolean types. @@ -206,12 +256,13 @@ func convertAssign(d interface{}, s interface{}) (err error) { // following the copied values. func Scan(src []interface{}, dest ...interface{}) ([]interface{}, error) { if len(src) < len(dest) { - return nil, errors.New("redigo: Scan array short") + return nil, errors.New("redigo.Scan: array short") } var err error for i, d := range dest { err = convertAssign(d, src[i]) if err != nil { + err = fmt.Errorf("redigo.Scan: cannot assign to dest %d: %v", i, err) break } } @@ -219,9 +270,9 @@ func Scan(src []interface{}, dest ...interface{}) ([]interface{}, error) { } type fieldSpec struct { - name string - index []int - //omitEmpty bool + name string + index []int + omitEmpty bool } type structSpec struct { @@ -237,7 +288,7 @@ func compileStructSpec(t reflect.Type, depth map[string]int, index []int, ss *st for i := 0; i < t.NumField(); i++ { f := t.Field(i) switch { - case f.PkgPath != "": + case f.PkgPath != "" && !f.Anonymous: // Ignore unexported fields. case f.Anonymous: // TODO: Handle pointers. Requires change to decoder and @@ -258,10 +309,10 @@ func compileStructSpec(t reflect.Type, depth map[string]int, index []int, ss *st } for _, s := range p[1:] { switch s { - //case "omitempty": - // fs.omitempty = true + case "omitempty": + fs.omitEmpty = true default: - panic(errors.New("redigo: unknown field flag " + s + " for type " + t.Name())) + panic(fmt.Errorf("redigo: unknown field tag %s for type %s", s, t.Name())) } } } @@ -321,7 +372,7 @@ func structSpecForType(t reflect.Type) *structSpec { return ss } -var errScanStructValue = errors.New("redigo: ScanStruct value must be non-nil pointer to a struct") +var errScanStructValue = errors.New("redigo.ScanStruct: value must be non-nil pointer to a struct") // ScanStruct scans alternating names and values from src to a struct. The // HGETALL and CONFIG GET commands return replies in this format. @@ -329,10 +380,11 @@ var errScanStructValue = errors.New("redigo: ScanStruct value must be non-nil po // ScanStruct uses exported field names to match values in the response. Use // 'redis' field tag to override the name: // -// Field int `redis:"myName"` +// Field int `redis:"myName"` // // Fields with the tag redis:"-" are ignored. // +// Each field uses RedisScan if available otherwise: // Integer, float, boolean, string and []byte fields are supported. Scan uses the // standard strconv package to convert bulk string values to numeric and // boolean types. @@ -350,7 +402,7 @@ func ScanStruct(src []interface{}, dest interface{}) error { ss := structSpecForType(d.Type()) if len(src)%2 != 0 { - return errors.New("redigo: ScanStruct expects even number of values in values") + return errors.New("redigo.ScanStruct: number of values not a multiple of 2") } for i := 0; i < len(src); i += 2 { @@ -360,21 +412,21 @@ func ScanStruct(src []interface{}, dest interface{}) error { } name, ok := src[i].([]byte) if !ok { - return errors.New("redigo: ScanStruct key not a bulk string value") + return fmt.Errorf("redigo.ScanStruct: key %d not a bulk string value", i) } fs := ss.fieldSpec(name) if fs == nil { continue } if err := convertAssignValue(d.FieldByIndex(fs.index), s); err != nil { - return err + return fmt.Errorf("redigo.ScanStruct: cannot assign field %s: %v", fs.name, err) } } return nil } var ( - errScanSliceValue = errors.New("redigo: ScanSlice dest must be non-nil pointer to a struct") + errScanSliceValue = errors.New("redigo.ScanSlice: dest must be non-nil pointer to a struct") ) // ScanSlice scans src to the slice pointed to by dest. The elements the dest @@ -407,7 +459,7 @@ func ScanSlice(src []interface{}, dest interface{}, fieldNames ...string) error continue } if err := convertAssignValue(d.Index(i), s); err != nil { - return err + return fmt.Errorf("redigo.ScanSlice: cannot assign element %d: %v", i, err) } } return nil @@ -420,18 +472,18 @@ func ScanSlice(src []interface{}, dest interface{}, fieldNames ...string) error for i, name := range fieldNames { fss[i] = ss.m[name] if fss[i] == nil { - return errors.New("redigo: ScanSlice bad field name " + name) + return fmt.Errorf("redigo.ScanSlice: ScanSlice bad field name %s", name) } } } if len(fss) == 0 { - return errors.New("redigo: ScanSlice no struct fields") + return errors.New("redigo.ScanSlice: no struct fields") } n := len(src) / len(fss) if n*len(fss) != len(src) { - return errors.New("redigo: ScanSlice length not a multiple of struct field count") + return errors.New("redigo.ScanSlice: length not a multiple of struct field count") } ensureLen(d, n) @@ -449,7 +501,7 @@ func ScanSlice(src []interface{}, dest interface{}, fieldNames ...string) error continue } if err := convertAssignValue(d.FieldByIndex(fs.index), s); err != nil { - return err + return fmt.Errorf("redigo.ScanSlice: cannot assign element %d to field %s: %v", i*len(fss)+j, fs.name, err) } } } @@ -507,6 +559,26 @@ func flattenStruct(args Args, v reflect.Value) Args { ss := structSpecForType(v.Type()) for _, fs := range ss.l { fv := v.FieldByIndex(fs.index) + if fs.omitEmpty { + var empty = false + switch fv.Kind() { + case reflect.Array, reflect.Map, reflect.Slice, reflect.String: + empty = fv.Len() == 0 + case reflect.Bool: + empty = !fv.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + empty = fv.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + empty = fv.Uint() == 0 + case reflect.Float32, reflect.Float64: + empty = fv.Float() == 0 + case reflect.Interface, reflect.Ptr: + empty = fv.IsNil() + } + if empty { + continue + } + } args = append(args, fs.name, fv.Interface()) } return args diff --git a/vendor/github.com/garyburd/redigo/redis/script.go b/vendor/github.com/garyburd/redigo/redis/script.go index 78605a90a..0ef1c821f 100644 --- a/vendor/github.com/garyburd/redigo/redis/script.go +++ b/vendor/github.com/garyburd/redigo/redis/script.go @@ -55,6 +55,11 @@ func (s *Script) args(spec string, keysAndArgs []interface{}) []interface{} { return args } +// Hash returns the script hash. +func (s *Script) Hash() string { + return s.hash +} + // Do evaluates the script. Under the covers, Do optimistically evaluates the // script using the EVALSHA command. If the command fails because the script is // not loaded, then Do evaluates the script using the EVAL command (thus diff --git a/vendor/github.com/gorilla/handlers/.editorconfig b/vendor/github.com/gorilla/handlers/.editorconfig new file mode 100644 index 000000000..c6b74c3e0 --- /dev/null +++ b/vendor/github.com/gorilla/handlers/.editorconfig @@ -0,0 +1,20 @@ +; https://editorconfig.org/ + +root = true + +[*] +insert_final_newline = true +charset = utf-8 +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 + +[{Makefile,go.mod,go.sum,*.go,.gitmodules}] +indent_style = tab +indent_size = 4 + +[*.md] +indent_size = 4 +trim_trailing_whitespace = false + +eclint_indent_style = unset \ No newline at end of file diff --git a/vendor/github.com/gorilla/handlers/.gitignore b/vendor/github.com/gorilla/handlers/.gitignore new file mode 100644 index 000000000..577a89e81 --- /dev/null +++ b/vendor/github.com/gorilla/handlers/.gitignore @@ -0,0 +1,2 @@ +# Output of the go test coverage tool +coverage.coverprofile diff --git a/vendor/github.com/gorilla/handlers/.travis.yml b/vendor/github.com/gorilla/handlers/.travis.yml deleted file mode 100644 index 354b7f8b2..000000000 --- a/vendor/github.com/gorilla/handlers/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: go - -go: - - 1.1 - - 1.2 - - 1.3 - - 1.4 - - tip diff --git a/vendor/github.com/gorilla/handlers/LICENSE b/vendor/github.com/gorilla/handlers/LICENSE index 66ea3c8ae..bb9d80bc9 100644 --- a/vendor/github.com/gorilla/handlers/LICENSE +++ b/vendor/github.com/gorilla/handlers/LICENSE @@ -1,22 +1,27 @@ -Copyright (c) 2013 The Gorilla Handlers Authors. All rights reserved. +Copyright (c) 2023 The Gorilla Authors. All rights reserved. Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +modification, are permitted provided that the following conditions are +met: - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/gorilla/handlers/Makefile b/vendor/github.com/gorilla/handlers/Makefile new file mode 100644 index 000000000..003b784f7 --- /dev/null +++ b/vendor/github.com/gorilla/handlers/Makefile @@ -0,0 +1,34 @@ +GO_LINT=$(shell which golangci-lint 2> /dev/null || echo '') +GO_LINT_URI=github.com/golangci/golangci-lint/cmd/golangci-lint@latest + +GO_SEC=$(shell which gosec 2> /dev/null || echo '') +GO_SEC_URI=github.com/securego/gosec/v2/cmd/gosec@latest + +GO_VULNCHECK=$(shell which govulncheck 2> /dev/null || echo '') +GO_VULNCHECK_URI=golang.org/x/vuln/cmd/govulncheck@latest + +.PHONY: verify +verify: sec govulncheck lint test + +.PHONY: lint +lint: + $(if $(GO_LINT), ,go install $(GO_LINT_URI)) + @echo "##### Running golangci-lint #####" + golangci-lint run -v + +.PHONY: sec +sec: + $(if $(GO_SEC), ,go install $(GO_SEC_URI)) + @echo "##### Running gosec #####" + gosec ./... + +.PHONY: govulncheck +govulncheck: + $(if $(GO_VULNCHECK), ,go install $(GO_VULNCHECK_URI)) + @echo "##### Running govulncheck #####" + govulncheck ./... + +.PHONY: test +test: + @echo "##### Running tests #####" + go test -race -cover -coverprofile=coverage.coverprofile -covermode=atomic -v ./... diff --git a/vendor/github.com/gorilla/handlers/README.md b/vendor/github.com/gorilla/handlers/README.md index a340abe08..02555b264 100644 --- a/vendor/github.com/gorilla/handlers/README.md +++ b/vendor/github.com/gorilla/handlers/README.md @@ -1,28 +1,32 @@ -gorilla/handlers -================ -[![GoDoc](https://godoc.org/github.com/gorilla/handlers?status.svg)](https://godoc.org/github.com/gorilla/handlers) [![Build Status](https://travis-ci.org/gorilla/handlers.svg?branch=master)](https://travis-ci.org/gorilla/handlers) +# gorilla/handlers + +![Testing](https://github.com/gorilla/handlers/actions/workflows/test.yml/badge.svg) +[![Codecov](https://codecov.io/github/gorilla/handlers/branch/main/graph/badge.svg)](https://codecov.io/github/gorilla/handlers) +[![GoDoc](https://godoc.org/github.com/gorilla/handlers?status.svg)](https://godoc.org/github.com/gorilla/handlers) +[![Sourcegraph](https://sourcegraph.com/github.com/gorilla/handlers/-/badge.svg)](https://sourcegraph.com/github.com/gorilla/handlers?badge) Package handlers is a collection of handlers (aka "HTTP middleware") for use with Go's `net/http` package (or any framework supporting `http.Handler`), including: -* `LoggingHandler` for logging HTTP requests in the Apache [Common Log +* [**LoggingHandler**](https://godoc.org/github.com/gorilla/handlers#LoggingHandler) for logging HTTP requests in the Apache [Common Log Format](http://httpd.apache.org/docs/2.2/logs.html#common). -* `CombinedLoggingHandler` for logging HTTP requests in the Apache [Combined Log +* [**CombinedLoggingHandler**](https://godoc.org/github.com/gorilla/handlers#CombinedLoggingHandler) for logging HTTP requests in the Apache [Combined Log Format](http://httpd.apache.org/docs/2.2/logs.html#combined) commonly used by both Apache and nginx. -* `CompressHandler` for gzipping responses. -* `ContentTypeHandler` for validating requests against a list of accepted +* [**CompressHandler**](https://godoc.org/github.com/gorilla/handlers#CompressHandler) for gzipping responses. +* [**ContentTypeHandler**](https://godoc.org/github.com/gorilla/handlers#ContentTypeHandler) for validating requests against a list of accepted content types. -* `MethodHandler` for matching HTTP methods against handlers in a +* [**MethodHandler**](https://godoc.org/github.com/gorilla/handlers#MethodHandler) for matching HTTP methods against handlers in a `map[string]http.Handler` -* `ProxyHeaders` for populating `r.RemoteAddr` and `r.URL.Scheme` based on the +* [**ProxyHeaders**](https://godoc.org/github.com/gorilla/handlers#ProxyHeaders) for populating `r.RemoteAddr` and `r.URL.Scheme` based on the `X-Forwarded-For`, `X-Real-IP`, `X-Forwarded-Proto` and RFC7239 `Forwarded` headers when running a Go server behind a HTTP reverse proxy. -* `CanonicalHost` for re-directing to the preferred host when handling multiple +* [**CanonicalHost**](https://godoc.org/github.com/gorilla/handlers#CanonicalHost) for re-directing to the preferred host when handling multiple domains (i.e. multiple CNAME aliases). +* [**RecoveryHandler**](https://godoc.org/github.com/gorilla/handlers#RecoveryHandler) for recovering from unexpected panics. Other handlers are documented [on the Gorilla -website](http://www.gorillatoolkit.org/pkg/handlers). +website](https://www.gorillatoolkit.org/pkg/handlers). ## Example diff --git a/vendor/github.com/gorilla/handlers/canonical.go b/vendor/github.com/gorilla/handlers/canonical.go index 3961695c4..7121f5307 100644 --- a/vendor/github.com/gorilla/handlers/canonical.go +++ b/vendor/github.com/gorilla/handlers/canonical.go @@ -18,16 +18,14 @@ type canonical struct { // // Note: If the provided domain is considered invalid by url.Parse or otherwise // returns an empty scheme or host, clients are not re-directed. -// not re-directed. // // Example: // -// r := mux.NewRouter() -// canonical := handlers.CanonicalHost("http://www.gorillatoolkit.org", 302) -// r.HandleFunc("/route", YourHandler) -// -// log.Fatal(http.ListenAndServe(":7000", canonical(r))) +// r := mux.NewRouter() +// canonical := handlers.CanonicalHost("http://www.gorillatoolkit.org", 302) +// r.HandleFunc("/route", YourHandler) // +// log.Fatal(http.ListenAndServe(":7000", canonical(r))) func CanonicalHost(domain string, code int) func(h http.Handler) http.Handler { fn := func(h http.Handler) http.Handler { return canonical{h, domain, code} @@ -54,7 +52,11 @@ func (c canonical) ServeHTTP(w http.ResponseWriter, r *http.Request) { if !strings.EqualFold(cleanHost(r.Host), dest.Host) { // Re-build the destination URL dest := dest.Scheme + "://" + dest.Host + r.URL.Path + if r.URL.RawQuery != "" { + dest += "?" + r.URL.RawQuery + } http.Redirect(w, r, dest, c.code) + return } c.h.ServeHTTP(w, r) diff --git a/vendor/github.com/gorilla/handlers/compress.go b/vendor/github.com/gorilla/handlers/compress.go index 3d90e1914..d6f589503 100644 --- a/vendor/github.com/gorilla/handlers/compress.go +++ b/vendor/github.com/gorilla/handlers/compress.go @@ -10,75 +10,134 @@ import ( "io" "net/http" "strings" + + "github.com/felixge/httpsnoop" ) +const acceptEncoding string = "Accept-Encoding" + type compressResponseWriter struct { - io.Writer - http.ResponseWriter - http.Hijacker + compressor io.Writer + w http.ResponseWriter } -func (w *compressResponseWriter) Header() http.Header { - return w.ResponseWriter.Header() +func (cw *compressResponseWriter) WriteHeader(c int) { + cw.w.Header().Del("Content-Length") + cw.w.WriteHeader(c) } -func (w *compressResponseWriter) Write(b []byte) (int, error) { - h := w.ResponseWriter.Header() +func (cw *compressResponseWriter) Write(b []byte) (int, error) { + h := cw.w.Header() if h.Get("Content-Type") == "" { h.Set("Content-Type", http.DetectContentType(b)) } + h.Del("Content-Length") + + return cw.compressor.Write(b) +} - return w.Writer.Write(b) +func (cw *compressResponseWriter) ReadFrom(r io.Reader) (int64, error) { + return io.Copy(cw.compressor, r) +} + +type flusher interface { + Flush() error +} + +func (cw *compressResponseWriter) Flush() { + // Flush compressed data if compressor supports it. + if f, ok := cw.compressor.(flusher); ok { + _ = f.Flush() + } + // Flush HTTP response. + if f, ok := cw.w.(http.Flusher); ok { + f.Flush() + } } // CompressHandler gzip compresses HTTP responses for clients that support it // via the 'Accept-Encoding' header. +// +// Compressing TLS traffic may leak the page contents to an attacker if the +// page contains user input: http://security.stackexchange.com/a/102015/12208 func CompressHandler(h http.Handler) http.Handler { + return CompressHandlerLevel(h, gzip.DefaultCompression) +} + +// CompressHandlerLevel gzip compresses HTTP responses with specified compression level +// for clients that support it via the 'Accept-Encoding' header. +// +// The compression level should be gzip.DefaultCompression, gzip.NoCompression, +// or any integer value between gzip.BestSpeed and gzip.BestCompression inclusive. +// gzip.DefaultCompression is used in case of invalid compression level. +func CompressHandlerLevel(h http.Handler, level int) http.Handler { + if level < gzip.DefaultCompression || level > gzip.BestCompression { + level = gzip.DefaultCompression + } + + const ( + gzipEncoding = "gzip" + flateEncoding = "deflate" + ) + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - L: - for _, enc := range strings.Split(r.Header.Get("Accept-Encoding"), ",") { - switch strings.TrimSpace(enc) { - case "gzip": - w.Header().Set("Content-Encoding", "gzip") - w.Header().Add("Vary", "Accept-Encoding") - - gw := gzip.NewWriter(w) - defer gw.Close() - - h, hok := w.(http.Hijacker) - if !hok { /* w is not Hijacker... oh well... */ - h = nil - } - - w = &compressResponseWriter{ - Writer: gw, - ResponseWriter: w, - Hijacker: h, - } - - break L - case "deflate": - w.Header().Set("Content-Encoding", "deflate") - w.Header().Add("Vary", "Accept-Encoding") - - fw, _ := flate.NewWriter(w, flate.DefaultCompression) - defer fw.Close() - - h, hok := w.(http.Hijacker) - if !hok { /* w is not Hijacker... oh well... */ - h = nil - } - - w = &compressResponseWriter{ - Writer: fw, - ResponseWriter: w, - Hijacker: h, - } - - break L + // detect what encoding to use + var encoding string + for _, curEnc := range strings.Split(r.Header.Get(acceptEncoding), ",") { + curEnc = strings.TrimSpace(curEnc) + if curEnc == gzipEncoding || curEnc == flateEncoding { + encoding = curEnc + break } } + // always add Accept-Encoding to Vary to prevent intermediate caches corruption + w.Header().Add("Vary", acceptEncoding) + + // if we weren't able to identify an encoding we're familiar with, pass on the + // request to the handler and return + if encoding == "" { + h.ServeHTTP(w, r) + return + } + + if r.Header.Get("Upgrade") != "" { + h.ServeHTTP(w, r) + return + } + + // wrap the ResponseWriter with the writer for the chosen encoding + var encWriter io.WriteCloser + if encoding == gzipEncoding { + encWriter, _ = gzip.NewWriterLevel(w, level) + } else if encoding == flateEncoding { + encWriter, _ = flate.NewWriter(w, level) + } + defer encWriter.Close() + + w.Header().Set("Content-Encoding", encoding) + r.Header.Del(acceptEncoding) + + cw := &compressResponseWriter{ + w: w, + compressor: encWriter, + } + + w = httpsnoop.Wrap(w, httpsnoop.Hooks{ + Write: func(httpsnoop.WriteFunc) httpsnoop.WriteFunc { + return cw.Write + }, + WriteHeader: func(httpsnoop.WriteHeaderFunc) httpsnoop.WriteHeaderFunc { + return cw.WriteHeader + }, + Flush: func(httpsnoop.FlushFunc) httpsnoop.FlushFunc { + return cw.Flush + }, + ReadFrom: func(rff httpsnoop.ReadFromFunc) httpsnoop.ReadFromFunc { + return cw.ReadFrom + }, + }) + h.ServeHTTP(w, r) }) } diff --git a/vendor/github.com/gorilla/handlers/cors.go b/vendor/github.com/gorilla/handlers/cors.go new file mode 100644 index 000000000..8af9c096e --- /dev/null +++ b/vendor/github.com/gorilla/handlers/cors.go @@ -0,0 +1,352 @@ +package handlers + +import ( + "net/http" + "strconv" + "strings" +) + +// CORSOption represents a functional option for configuring the CORS middleware. +type CORSOption func(*cors) error + +type cors struct { + h http.Handler + allowedHeaders []string + allowedMethods []string + allowedOrigins []string + allowedOriginValidator OriginValidator + exposedHeaders []string + maxAge int + ignoreOptions bool + allowCredentials bool + optionStatusCode int +} + +// OriginValidator takes an origin string and returns whether or not that origin is allowed. +type OriginValidator func(string) bool + +var ( + defaultCorsOptionStatusCode = http.StatusOK + defaultCorsMethods = []string{http.MethodGet, http.MethodHead, http.MethodPost} + defaultCorsHeaders = []string{"Accept", "Accept-Language", "Content-Language", "Origin"} + // (WebKit/Safari v9 sends the Origin header by default in AJAX requests). +) + +const ( + corsOptionMethod string = http.MethodOptions + corsAllowOriginHeader string = "Access-Control-Allow-Origin" + corsExposeHeadersHeader string = "Access-Control-Expose-Headers" + corsMaxAgeHeader string = "Access-Control-Max-Age" + corsAllowMethodsHeader string = "Access-Control-Allow-Methods" + corsAllowHeadersHeader string = "Access-Control-Allow-Headers" + corsAllowCredentialsHeader string = "Access-Control-Allow-Credentials" + corsRequestMethodHeader string = "Access-Control-Request-Method" + corsRequestHeadersHeader string = "Access-Control-Request-Headers" + corsOriginHeader string = "Origin" + corsVaryHeader string = "Vary" + corsOriginMatchAll string = "*" +) + +func (ch *cors) ServeHTTP(w http.ResponseWriter, r *http.Request) { + origin := r.Header.Get(corsOriginHeader) + if !ch.isOriginAllowed(origin) { + if r.Method != corsOptionMethod || ch.ignoreOptions { + ch.h.ServeHTTP(w, r) + } + + return + } + + if r.Method == corsOptionMethod { + if ch.ignoreOptions { + ch.h.ServeHTTP(w, r) + return + } + + if _, ok := r.Header[corsRequestMethodHeader]; !ok { + w.WriteHeader(http.StatusBadRequest) + return + } + + method := r.Header.Get(corsRequestMethodHeader) + if !ch.isMatch(method, ch.allowedMethods) { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + + requestHeaders := strings.Split(r.Header.Get(corsRequestHeadersHeader), ",") + allowedHeaders := []string{} + for _, v := range requestHeaders { + canonicalHeader := http.CanonicalHeaderKey(strings.TrimSpace(v)) + if canonicalHeader == "" || ch.isMatch(canonicalHeader, defaultCorsHeaders) { + continue + } + + if !ch.isMatch(canonicalHeader, ch.allowedHeaders) { + w.WriteHeader(http.StatusForbidden) + return + } + + allowedHeaders = append(allowedHeaders, canonicalHeader) + } + + if len(allowedHeaders) > 0 { + w.Header().Set(corsAllowHeadersHeader, strings.Join(allowedHeaders, ",")) + } + + if ch.maxAge > 0 { + w.Header().Set(corsMaxAgeHeader, strconv.Itoa(ch.maxAge)) + } + + if !ch.isMatch(method, defaultCorsMethods) { + w.Header().Set(corsAllowMethodsHeader, method) + } + } else if len(ch.exposedHeaders) > 0 { + w.Header().Set(corsExposeHeadersHeader, strings.Join(ch.exposedHeaders, ",")) + } + + if ch.allowCredentials { + w.Header().Set(corsAllowCredentialsHeader, "true") + } + + if len(ch.allowedOrigins) > 1 { + w.Header().Set(corsVaryHeader, corsOriginHeader) + } + + returnOrigin := origin + if ch.allowedOriginValidator == nil && len(ch.allowedOrigins) == 0 { + returnOrigin = "*" + } else { + for _, o := range ch.allowedOrigins { + // A configuration of * is different than explicitly setting an allowed + // origin. Returning arbitrary origin headers in an access control allow + // origin header is unsafe and is not required by any use case. + if o == corsOriginMatchAll { + returnOrigin = "*" + break + } + } + } + w.Header().Set(corsAllowOriginHeader, returnOrigin) + + if r.Method == corsOptionMethod { + w.WriteHeader(ch.optionStatusCode) + return + } + ch.h.ServeHTTP(w, r) +} + +// CORS provides Cross-Origin Resource Sharing middleware. +// Example: +// +// import ( +// "net/http" +// +// "github.com/gorilla/handlers" +// "github.com/gorilla/mux" +// ) +// +// func main() { +// r := mux.NewRouter() +// r.HandleFunc("/users", UserEndpoint) +// r.HandleFunc("/projects", ProjectEndpoint) +// +// // Apply the CORS middleware to our top-level router, with the defaults. +// http.ListenAndServe(":8000", handlers.CORS()(r)) +// } +func CORS(opts ...CORSOption) func(http.Handler) http.Handler { + return func(h http.Handler) http.Handler { + ch := parseCORSOptions(opts...) + ch.h = h + return ch + } +} + +func parseCORSOptions(opts ...CORSOption) *cors { + ch := &cors{ + allowedMethods: defaultCorsMethods, + allowedHeaders: defaultCorsHeaders, + allowedOrigins: []string{}, + optionStatusCode: defaultCorsOptionStatusCode, + } + + for _, option := range opts { + _ = option(ch) //TODO: @bharat-rajani, return error to caller if not nil? + } + + return ch +} + +// +// Functional options for configuring CORS. +// + +// AllowedHeaders adds the provided headers to the list of allowed headers in a +// CORS request. +// This is an append operation so the headers Accept, Accept-Language, +// and Content-Language are always allowed. +// Content-Type must be explicitly declared if accepting Content-Types other than +// application/x-www-form-urlencoded, multipart/form-data, or text/plain. +func AllowedHeaders(headers []string) CORSOption { + return func(ch *cors) error { + for _, v := range headers { + normalizedHeader := http.CanonicalHeaderKey(strings.TrimSpace(v)) + if normalizedHeader == "" { + continue + } + + if !ch.isMatch(normalizedHeader, ch.allowedHeaders) { + ch.allowedHeaders = append(ch.allowedHeaders, normalizedHeader) + } + } + + return nil + } +} + +// AllowedMethods can be used to explicitly allow methods in the +// Access-Control-Allow-Methods header. +// This is a replacement operation so you must also +// pass GET, HEAD, and POST if you wish to support those methods. +func AllowedMethods(methods []string) CORSOption { + return func(ch *cors) error { + ch.allowedMethods = []string{} + for _, v := range methods { + normalizedMethod := strings.ToUpper(strings.TrimSpace(v)) + if normalizedMethod == "" { + continue + } + + if !ch.isMatch(normalizedMethod, ch.allowedMethods) { + ch.allowedMethods = append(ch.allowedMethods, normalizedMethod) + } + } + + return nil + } +} + +// AllowedOrigins sets the allowed origins for CORS requests, as used in the +// 'Allow-Access-Control-Origin' HTTP header. +// Note: Passing in a []string{"*"} will allow any domain. +func AllowedOrigins(origins []string) CORSOption { + return func(ch *cors) error { + for _, v := range origins { + if v == corsOriginMatchAll { + ch.allowedOrigins = []string{corsOriginMatchAll} + return nil + } + } + + ch.allowedOrigins = origins + return nil + } +} + +// AllowedOriginValidator sets a function for evaluating allowed origins in CORS requests, represented by the +// 'Allow-Access-Control-Origin' HTTP header. +func AllowedOriginValidator(fn OriginValidator) CORSOption { + return func(ch *cors) error { + ch.allowedOriginValidator = fn + return nil + } +} + +// OptionStatusCode sets a custom status code on the OPTIONS requests. +// Default behaviour sets it to 200 to reflect best practices. This is option is not mandatory +// and can be used if you need a custom status code (i.e 204). +// +// More informations on the spec: +// https://fetch.spec.whatwg.org/#cors-preflight-fetch +func OptionStatusCode(code int) CORSOption { + return func(ch *cors) error { + ch.optionStatusCode = code + return nil + } +} + +// ExposedHeaders can be used to specify headers that are available +// and will not be stripped out by the user-agent. +func ExposedHeaders(headers []string) CORSOption { + return func(ch *cors) error { + ch.exposedHeaders = []string{} + for _, v := range headers { + normalizedHeader := http.CanonicalHeaderKey(strings.TrimSpace(v)) + if normalizedHeader == "" { + continue + } + + if !ch.isMatch(normalizedHeader, ch.exposedHeaders) { + ch.exposedHeaders = append(ch.exposedHeaders, normalizedHeader) + } + } + + return nil + } +} + +// MaxAge determines the maximum age (in seconds) between preflight requests. A +// maximum of 10 minutes is allowed. An age above this value will default to 10 +// minutes. +func MaxAge(age int) CORSOption { + return func(ch *cors) error { + // Maximum of 10 minutes. + if age > 600 { + age = 600 + } + + ch.maxAge = age + return nil + } +} + +// IgnoreOptions causes the CORS middleware to ignore OPTIONS requests, instead +// passing them through to the next handler. This is useful when your application +// or framework has a pre-existing mechanism for responding to OPTIONS requests. +func IgnoreOptions() CORSOption { + return func(ch *cors) error { + ch.ignoreOptions = true + return nil + } +} + +// AllowCredentials can be used to specify that the user agent may pass +// authentication details along with the request. +func AllowCredentials() CORSOption { + return func(ch *cors) error { + ch.allowCredentials = true + return nil + } +} + +func (ch *cors) isOriginAllowed(origin string) bool { + if origin == "" { + return false + } + + if ch.allowedOriginValidator != nil { + return ch.allowedOriginValidator(origin) + } + + if len(ch.allowedOrigins) == 0 { + return true + } + + for _, allowedOrigin := range ch.allowedOrigins { + if allowedOrigin == origin || allowedOrigin == corsOriginMatchAll { + return true + } + } + + return false +} + +func (ch *cors) isMatch(needle string, haystack []string) bool { + for _, v := range haystack { + if v == needle { + return true + } + } + + return false +} diff --git a/vendor/github.com/gorilla/handlers/handlers.go b/vendor/github.com/gorilla/handlers/handlers.go index c3c20e5b9..9b92fce33 100644 --- a/vendor/github.com/gorilla/handlers/handlers.go +++ b/vendor/github.com/gorilla/handlers/handlers.go @@ -7,27 +7,22 @@ package handlers import ( "bufio" "fmt" - "io" "net" "net/http" - "net/url" "sort" - "strconv" "strings" - "time" - "unicode/utf8" ) -// MethodHandler is an http.Handler that dispatches to a handler whose key in the MethodHandler's -// map matches the name of the HTTP request's method, eg: GET +// MethodHandler is an http.Handler that dispatches to a handler whose key in the +// MethodHandler's map matches the name of the HTTP request's method, eg: GET // -// If the request's method is OPTIONS and OPTIONS is not a key in the map then the handler -// responds with a status of 200 and sets the Allow header to a comma-separated list of -// available methods. +// If the request's method is OPTIONS and OPTIONS is not a key in the map then +// the handler responds with a status of 200 and sets the Allow header to a +// comma-separated list of available methods. // -// If the request's method doesn't match any of its keys the handler responds with -// a status of 405, Method not allowed and sets the Allow header to a comma-separated list -// of available methods. +// If the request's method doesn't match any of its keys the handler responds +// with a status of HTTP 405 "Method Not Allowed" and sets the Allow header to a +// comma-separated list of available methods. type MethodHandler map[string]http.Handler func (h MethodHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { @@ -40,7 +35,7 @@ func (h MethodHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { } sort.Strings(allow) w.Header().Set("Allow", strings.Join(allow, ", ")) - if req.Method == "OPTIONS" { + if req.Method == http.MethodOptions { w.WriteHeader(http.StatusOK) } else { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) @@ -48,74 +43,15 @@ func (h MethodHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { } } -// loggingHandler is the http.Handler implementation for LoggingHandlerTo and its friends -type loggingHandler struct { - writer io.Writer - handler http.Handler -} - -// combinedLoggingHandler is the http.Handler implementation for LoggingHandlerTo and its friends -type combinedLoggingHandler struct { - writer io.Writer - handler http.Handler -} - -func (h loggingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { - t := time.Now() - logger := makeLogger(w) - url := *req.URL - h.handler.ServeHTTP(logger, req) - writeLog(h.writer, req, url, t, logger.Status(), logger.Size()) -} - -func (h combinedLoggingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { - t := time.Now() - logger := makeLogger(w) - url := *req.URL - h.handler.ServeHTTP(logger, req) - writeCombinedLog(h.writer, req, url, t, logger.Status(), logger.Size()) -} - -func makeLogger(w http.ResponseWriter) loggingResponseWriter { - var logger loggingResponseWriter = &responseLogger{w: w} - if _, ok := w.(http.Hijacker); ok { - logger = &hijackLogger{responseLogger{w: w}} - } - h, ok1 := logger.(http.Hijacker) - c, ok2 := w.(http.CloseNotifier) - if ok1 && ok2 { - return hijackCloseNotifier{logger, h, c} - } - if ok2 { - return &closeNotifyWriter{logger, c} - } - return logger -} - -type loggingResponseWriter interface { - http.ResponseWriter - http.Flusher - Status() int - Size() int -} - -// responseLogger is wrapper of http.ResponseWriter that keeps track of its HTTP status -// code and body size +// responseLogger is wrapper of http.ResponseWriter that keeps track of its HTTP +// status code and body size. type responseLogger struct { w http.ResponseWriter status int size int } -func (l *responseLogger) Header() http.Header { - return l.w.Header() -} - func (l *responseLogger) Write(b []byte) (int, error) { - if l.status == 0 { - // The status will be StatusOK if WriteHeader has not been called yet - l.status = http.StatusOK - } size, err := l.w.Write(b) l.size += size return size, err @@ -134,187 +70,18 @@ func (l *responseLogger) Size() int { return l.size } -func (l *responseLogger) Flush() { - f, ok := l.w.(http.Flusher) - if ok { - f.Flush() - } -} - -type hijackLogger struct { - responseLogger -} - -func (l *hijackLogger) Hijack() (net.Conn, *bufio.ReadWriter, error) { - h := l.responseLogger.w.(http.Hijacker) - conn, rw, err := h.Hijack() - if err == nil && l.responseLogger.status == 0 { - // The status will be StatusSwitchingProtocols if there was no error and WriteHeader has not been called yet - l.responseLogger.status = http.StatusSwitchingProtocols +func (l *responseLogger) Hijack() (net.Conn, *bufio.ReadWriter, error) { + conn, rw, err := l.w.(http.Hijacker).Hijack() + if err == nil && l.status == 0 { + // The status will be StatusSwitchingProtocols if there was no error and + // WriteHeader has not been called yet + l.status = http.StatusSwitchingProtocols } return conn, rw, err } -type closeNotifyWriter struct { - loggingResponseWriter - http.CloseNotifier -} - -type hijackCloseNotifier struct { - loggingResponseWriter - http.Hijacker - http.CloseNotifier -} - -const lowerhex = "0123456789abcdef" - -func appendQuoted(buf []byte, s string) []byte { - var runeTmp [utf8.UTFMax]byte - for width := 0; len(s) > 0; s = s[width:] { - r := rune(s[0]) - width = 1 - if r >= utf8.RuneSelf { - r, width = utf8.DecodeRuneInString(s) - } - if width == 1 && r == utf8.RuneError { - buf = append(buf, `\x`...) - buf = append(buf, lowerhex[s[0]>>4]) - buf = append(buf, lowerhex[s[0]&0xF]) - continue - } - if r == rune('"') || r == '\\' { // always backslashed - buf = append(buf, '\\') - buf = append(buf, byte(r)) - continue - } - if strconv.IsPrint(r) { - n := utf8.EncodeRune(runeTmp[:], r) - buf = append(buf, runeTmp[:n]...) - continue - } - switch r { - case '\a': - buf = append(buf, `\a`...) - case '\b': - buf = append(buf, `\b`...) - case '\f': - buf = append(buf, `\f`...) - case '\n': - buf = append(buf, `\n`...) - case '\r': - buf = append(buf, `\r`...) - case '\t': - buf = append(buf, `\t`...) - case '\v': - buf = append(buf, `\v`...) - default: - switch { - case r < ' ': - buf = append(buf, `\x`...) - buf = append(buf, lowerhex[s[0]>>4]) - buf = append(buf, lowerhex[s[0]&0xF]) - case r > utf8.MaxRune: - r = 0xFFFD - fallthrough - case r < 0x10000: - buf = append(buf, `\u`...) - for s := 12; s >= 0; s -= 4 { - buf = append(buf, lowerhex[r>>uint(s)&0xF]) - } - default: - buf = append(buf, `\U`...) - for s := 28; s >= 0; s -= 4 { - buf = append(buf, lowerhex[r>>uint(s)&0xF]) - } - } - } - } - return buf - -} - -// buildCommonLogLine builds a log entry for req in Apache Common Log Format. -// ts is the timestamp with which the entry should be logged. -// status and size are used to provide the response HTTP status and size. -func buildCommonLogLine(req *http.Request, url url.URL, ts time.Time, status int, size int) []byte { - username := "-" - if url.User != nil { - if name := url.User.Username(); name != "" { - username = name - } - } - - host, _, err := net.SplitHostPort(req.RemoteAddr) - - if err != nil { - host = req.RemoteAddr - } - - uri := url.RequestURI() - - buf := make([]byte, 0, 3*(len(host)+len(username)+len(req.Method)+len(uri)+len(req.Proto)+50)/2) - buf = append(buf, host...) - buf = append(buf, " - "...) - buf = append(buf, username...) - buf = append(buf, " ["...) - buf = append(buf, ts.Format("02/Jan/2006:15:04:05 -0700")...) - buf = append(buf, `] "`...) - buf = append(buf, req.Method...) - buf = append(buf, " "...) - buf = appendQuoted(buf, uri) - buf = append(buf, " "...) - buf = append(buf, req.Proto...) - buf = append(buf, `" `...) - buf = append(buf, strconv.Itoa(status)...) - buf = append(buf, " "...) - buf = append(buf, strconv.Itoa(size)...) - return buf -} - -// writeLog writes a log entry for req to w in Apache Common Log Format. -// ts is the timestamp with which the entry should be logged. -// status and size are used to provide the response HTTP status and size. -func writeLog(w io.Writer, req *http.Request, url url.URL, ts time.Time, status, size int) { - buf := buildCommonLogLine(req, url, ts, status, size) - buf = append(buf, '\n') - w.Write(buf) -} - -// writeCombinedLog writes a log entry for req to w in Apache Combined Log Format. -// ts is the timestamp with which the entry should be logged. -// status and size are used to provide the response HTTP status and size. -func writeCombinedLog(w io.Writer, req *http.Request, url url.URL, ts time.Time, status, size int) { - buf := buildCommonLogLine(req, url, ts, status, size) - buf = append(buf, ` "`...) - buf = appendQuoted(buf, req.Referer()) - buf = append(buf, `" "`...) - buf = appendQuoted(buf, req.UserAgent()) - buf = append(buf, '"', '\n') - w.Write(buf) -} - -// CombinedLoggingHandler return a http.Handler that wraps h and logs requests to out in -// Apache Combined Log Format. -// -// See http://httpd.apache.org/docs/2.2/logs.html#combined for a description of this format. -// -// LoggingHandler always sets the ident field of the log to - -func CombinedLoggingHandler(out io.Writer, h http.Handler) http.Handler { - return combinedLoggingHandler{out, h} -} - -// LoggingHandler return a http.Handler that wraps h and logs requests to out in -// Apache Common Log Format (CLF). -// -// See http://httpd.apache.org/docs/2.2/logs.html#common for a description of this format. -// -// LoggingHandler always sets the ident field of the log to - -func LoggingHandler(out io.Writer, h http.Handler) http.Handler { - return loggingHandler{out, h} -} - -// isContentType validates the Content-Type header -// is contentType. That is, its type and subtype match. +// isContentType validates the Content-Type header matches the supplied +// contentType. That is, its type and subtype match. func isContentType(h http.Header, contentType string) bool { ct := h.Get("Content-Type") if i := strings.IndexRune(ct, ';'); i != -1 { @@ -323,14 +90,14 @@ func isContentType(h http.Header, contentType string) bool { return ct == contentType } -// ContentTypeHandler wraps and returns a http.Handler, validating the request content type -// is acompatible with the contentTypes list. -// It writes a HTTP 415 error if that fails. +// ContentTypeHandler wraps and returns a http.Handler, validating the request +// content type is compatible with the contentTypes list. It writes a HTTP 415 +// error if that fails. // // Only PUT, POST, and PATCH requests are considered. func ContentTypeHandler(h http.Handler, contentTypes ...string) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if !(r.Method == "PUT" || r.Method == "POST" || r.Method == "PATCH") { + if !(r.Method == http.MethodPut || r.Method == http.MethodPost || r.Method == http.MethodPatch) { h.ServeHTTP(w, r) return } @@ -341,7 +108,10 @@ func ContentTypeHandler(h http.Handler, contentTypes ...string) http.Handler { return } } - http.Error(w, fmt.Sprintf("Unsupported content type %q; expected one of %q", r.Header.Get("Content-Type"), contentTypes), http.StatusUnsupportedMediaType) + http.Error(w, fmt.Sprintf("Unsupported content type %q; expected one of %q", + r.Header.Get("Content-Type"), + contentTypes), + http.StatusUnsupportedMediaType) }) } @@ -354,22 +124,24 @@ const ( HTTPMethodOverrideFormKey = "_method" ) -// HTTPMethodOverrideHandler wraps and returns a http.Handler which checks for the X-HTTP-Method-Override header -// or the _method form key, and overrides (if valid) request.Method with its value. +// HTTPMethodOverrideHandler wraps and returns a http.Handler which checks for +// the X-HTTP-Method-Override header or the _method form key, and overrides (if +// valid) request.Method with its value. // -// This is especially useful for http clients that don't support many http verbs. -// It isn't secure to override e.g a GET to a POST, so only POST requests are considered. -// Likewise, the override method can only be a "write" method: PUT, PATCH or DELETE. +// This is especially useful for HTTP clients that don't support many http verbs. +// It isn't secure to override e.g a GET to a POST, so only POST requests are +// considered. Likewise, the override method can only be a "write" method: PUT, +// PATCH or DELETE. // // Form method takes precedence over header method. func HTTPMethodOverrideHandler(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method == "POST" { + if r.Method == http.MethodPost { om := r.FormValue(HTTPMethodOverrideFormKey) if om == "" { om = r.Header.Get(HTTPMethodOverrideHeader) } - if om == "PUT" || om == "PATCH" || om == "DELETE" { + if om == http.MethodPut || om == http.MethodPatch || om == http.MethodDelete { r.Method = om } } diff --git a/vendor/github.com/gorilla/handlers/logging.go b/vendor/github.com/gorilla/handlers/logging.go new file mode 100644 index 000000000..2badb6fbf --- /dev/null +++ b/vendor/github.com/gorilla/handlers/logging.go @@ -0,0 +1,246 @@ +// Copyright 2013 The Gorilla Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package handlers + +import ( + "io" + "net" + "net/http" + "net/url" + "strconv" + "time" + "unicode/utf8" + + "github.com/felixge/httpsnoop" +) + +// Logging + +// LogFormatterParams is the structure any formatter will be handed when time to log comes. +type LogFormatterParams struct { + Request *http.Request + URL url.URL + TimeStamp time.Time + StatusCode int + Size int +} + +// LogFormatter gives the signature of the formatter function passed to CustomLoggingHandler. +type LogFormatter func(writer io.Writer, params LogFormatterParams) + +// loggingHandler is the http.Handler implementation for LoggingHandlerTo and its +// friends + +type loggingHandler struct { + writer io.Writer + handler http.Handler + formatter LogFormatter +} + +func (h loggingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { + t := time.Now() + logger, w := makeLogger(w) + url := *req.URL + + h.handler.ServeHTTP(w, req) + if req.MultipartForm != nil { + err := req.MultipartForm.RemoveAll() + if err != nil { + return + } + } + + params := LogFormatterParams{ + Request: req, + URL: url, + TimeStamp: t, + StatusCode: logger.Status(), + Size: logger.Size(), + } + + h.formatter(h.writer, params) +} + +func makeLogger(w http.ResponseWriter) (*responseLogger, http.ResponseWriter) { + logger := &responseLogger{w: w, status: http.StatusOK} + return logger, httpsnoop.Wrap(w, httpsnoop.Hooks{ + Write: func(httpsnoop.WriteFunc) httpsnoop.WriteFunc { + return logger.Write + }, + WriteHeader: func(httpsnoop.WriteHeaderFunc) httpsnoop.WriteHeaderFunc { + return logger.WriteHeader + }, + }) +} + +const lowerhex = "0123456789abcdef" + +func appendQuoted(buf []byte, s string) []byte { + var runeTmp [utf8.UTFMax]byte + for width := 0; len(s) > 0; s = s[width:] { //nolint: wastedassign //TODO: why width starts from 0and reassigned as 1 + r := rune(s[0]) + width = 1 + if r >= utf8.RuneSelf { + r, width = utf8.DecodeRuneInString(s) + } + if width == 1 && r == utf8.RuneError { + buf = append(buf, `\x`...) + buf = append(buf, lowerhex[s[0]>>4]) + buf = append(buf, lowerhex[s[0]&0xF]) + continue + } + if r == rune('"') || r == '\\' { // always backslashed + buf = append(buf, '\\') + buf = append(buf, byte(r)) + continue + } + if strconv.IsPrint(r) { + n := utf8.EncodeRune(runeTmp[:], r) + buf = append(buf, runeTmp[:n]...) + continue + } + switch r { + case '\a': + buf = append(buf, `\a`...) + case '\b': + buf = append(buf, `\b`...) + case '\f': + buf = append(buf, `\f`...) + case '\n': + buf = append(buf, `\n`...) + case '\r': + buf = append(buf, `\r`...) + case '\t': + buf = append(buf, `\t`...) + case '\v': + buf = append(buf, `\v`...) + default: + switch { + case r < ' ': + buf = append(buf, `\x`...) + buf = append(buf, lowerhex[s[0]>>4]) + buf = append(buf, lowerhex[s[0]&0xF]) + case r > utf8.MaxRune: + r = 0xFFFD + fallthrough + case r < 0x10000: + buf = append(buf, `\u`...) + for s := 12; s >= 0; s -= 4 { + buf = append(buf, lowerhex[r>>uint(s)&0xF]) + } + default: + buf = append(buf, `\U`...) + for s := 28; s >= 0; s -= 4 { + buf = append(buf, lowerhex[r>>uint(s)&0xF]) + } + } + } + } + return buf +} + +// buildCommonLogLine builds a log entry for req in Apache Common Log Format. +// ts is the timestamp with which the entry should be logged. +// status and size are used to provide the response HTTP status and size. +func buildCommonLogLine(req *http.Request, url url.URL, ts time.Time, status int, size int) []byte { + username := "-" + if url.User != nil { + if name := url.User.Username(); name != "" { + username = name + } + } + + host, _, err := net.SplitHostPort(req.RemoteAddr) + if err != nil { + host = req.RemoteAddr + } + + uri := req.RequestURI + + // Requests using the CONNECT method over HTTP/2.0 must use + // the authority field (aka r.Host) to identify the target. + // Refer: https://httpwg.github.io/specs/rfc7540.html#CONNECT + if req.ProtoMajor == 2 && req.Method == "CONNECT" { + uri = req.Host + } + if uri == "" { + uri = url.RequestURI() + } + + buf := make([]byte, 0, 3*(len(host)+len(username)+len(req.Method)+len(uri)+len(req.Proto)+50)/2) + buf = append(buf, host...) + buf = append(buf, " - "...) + buf = append(buf, username...) + buf = append(buf, " ["...) + buf = append(buf, ts.Format("02/Jan/2006:15:04:05 -0700")...) + buf = append(buf, `] "`...) + buf = append(buf, req.Method...) + buf = append(buf, " "...) + buf = appendQuoted(buf, uri) + buf = append(buf, " "...) + buf = append(buf, req.Proto...) + buf = append(buf, `" `...) + buf = append(buf, strconv.Itoa(status)...) + buf = append(buf, " "...) + buf = append(buf, strconv.Itoa(size)...) + return buf +} + +// writeLog writes a log entry for req to w in Apache Common Log Format. +// ts is the timestamp with which the entry should be logged. +// status and size are used to provide the response HTTP status and size. +func writeLog(writer io.Writer, params LogFormatterParams) { + buf := buildCommonLogLine(params.Request, params.URL, params.TimeStamp, params.StatusCode, params.Size) + buf = append(buf, '\n') + _, _ = writer.Write(buf) +} + +// writeCombinedLog writes a log entry for req to w in Apache Combined Log Format. +// ts is the timestamp with which the entry should be logged. +// status and size are used to provide the response HTTP status and size. +func writeCombinedLog(writer io.Writer, params LogFormatterParams) { + buf := buildCommonLogLine(params.Request, params.URL, params.TimeStamp, params.StatusCode, params.Size) + buf = append(buf, ` "`...) + buf = appendQuoted(buf, params.Request.Referer()) + buf = append(buf, `" "`...) + buf = appendQuoted(buf, params.Request.UserAgent()) + buf = append(buf, '"', '\n') + _, _ = writer.Write(buf) +} + +// CombinedLoggingHandler return a http.Handler that wraps h and logs requests to out in +// Apache Combined Log Format. +// +// See http://httpd.apache.org/docs/2.2/logs.html#combined for a description of this format. +// +// LoggingHandler always sets the ident field of the log to -. +func CombinedLoggingHandler(out io.Writer, h http.Handler) http.Handler { + return loggingHandler{out, h, writeCombinedLog} +} + +// LoggingHandler return a http.Handler that wraps h and logs requests to out in +// Apache Common Log Format (CLF). +// +// See http://httpd.apache.org/docs/2.2/logs.html#common for a description of this format. +// +// LoggingHandler always sets the ident field of the log to - +// +// Example: +// +// r := mux.NewRouter() +// r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { +// w.Write([]byte("This is a catch-all route")) +// }) +// loggedRouter := handlers.LoggingHandler(os.Stdout, r) +// http.ListenAndServe(":1123", loggedRouter) +func LoggingHandler(out io.Writer, h http.Handler) http.Handler { + return loggingHandler{out, h, writeLog} +} + +// CustomLoggingHandler provides a way to supply a custom log formatter +// while taking advantage of the mechanisms in this package. +func CustomLoggingHandler(out io.Writer, h http.Handler, f LogFormatter) http.Handler { + return loggingHandler{out, h, f} +} diff --git a/vendor/github.com/gorilla/handlers/proxy_headers.go b/vendor/github.com/gorilla/handlers/proxy_headers.go index 268de9c6a..281d753e9 100644 --- a/vendor/github.com/gorilla/handlers/proxy_headers.go +++ b/vendor/github.com/gorilla/handlers/proxy_headers.go @@ -8,15 +8,17 @@ import ( var ( // De-facto standard header keys. - xForwardedFor = http.CanonicalHeaderKey("X-Forwarded-For") - xRealIP = http.CanonicalHeaderKey("X-Real-IP") - xForwardedProto = http.CanonicalHeaderKey("X-Forwarded-Scheme") + xForwardedFor = http.CanonicalHeaderKey("X-Forwarded-For") + xForwardedHost = http.CanonicalHeaderKey("X-Forwarded-Host") + xForwardedProto = http.CanonicalHeaderKey("X-Forwarded-Proto") + xForwardedScheme = http.CanonicalHeaderKey("X-Forwarded-Scheme") + xRealIP = http.CanonicalHeaderKey("X-Real-IP") ) var ( // RFC7239 defines a new "Forwarded: " header designed to replace the // existing use of X-Forwarded-* headers. - // e.g. Forwarded: for=192.0.2.60;proto=https;by=203.0.113.43 + // e.g. Forwarded: for=192.0.2.60;proto=https;by=203.0.113.43. forwarded = http.CanonicalHeaderKey("Forwarded") // Allows for a sub-match of the first value after 'for=' to the next // comma, semi-colon or space. The match is case-insensitive. @@ -28,9 +30,9 @@ var ( // ProxyHeaders inspects common reverse proxy headers and sets the corresponding // fields in the HTTP request struct. These are X-Forwarded-For and X-Real-IP -// for the remote (client) IP address, X-Forwarded-Proto for the scheme -// (http|https) and the RFC7239 Forwarded header, which may include both client -// IPs and schemes. +// for the remote (client) IP address, X-Forwarded-Proto or X-Forwarded-Scheme +// for the scheme (http|https), X-Forwarded-Host for the host and the RFC7239 +// Forwarded header, which may include both client IPs and schemes. // // NOTE: This middleware should only be used when behind a reverse // proxy like nginx, HAProxy or Apache. Reverse proxies that don't (or are @@ -49,7 +51,10 @@ func ProxyHeaders(h http.Handler) http.Handler { if scheme := getScheme(r); scheme != "" { r.URL.Scheme = scheme } - + // Set the host with the value passed by the proxy + if r.Header.Get(xForwardedHost) != "" { + r.Host = r.Header.Get(xForwardedHost) + } // Call the next handler in the chain. h.ServeHTTP(w, r) } @@ -62,7 +67,9 @@ func ProxyHeaders(h http.Handler) http.Handler { func getIP(r *http.Request) string { var addr string - if fwd := r.Header.Get(xForwardedFor); fwd != "" { + switch { + case r.Header.Get(xForwardedFor) != "": + fwd := r.Header.Get(xForwardedFor) // Only grab the first (client) address. Note that '192.168.0.1, // 10.1.1.1' is a valid key for X-Forwarded-For where addresses after // the first may represent forwarding proxies earlier in the chain. @@ -71,17 +78,15 @@ func getIP(r *http.Request) string { s = len(fwd) } addr = fwd[:s] - } else if fwd := r.Header.Get(xRealIP); fwd != "" { - // X-Real-IP should only contain one IP address (the client making the - // request). - addr = fwd - } else if fwd := r.Header.Get(forwarded); fwd != "" { + case r.Header.Get(xRealIP) != "": + addr = r.Header.Get(xRealIP) + case r.Header.Get(forwarded) != "": // match should contain at least two elements if the protocol was // specified in the Forwarded header. The first element will always be // the 'for=' capture, which we ignore. In the case of multiple IP // addresses (for=8.8.8.8, 8.8.4.4,172.16.1.20 is valid) we only // extract the first, which should be the client IP. - if match := forRegex.FindStringSubmatch(fwd); len(match) > 1 { + if match := forRegex.FindStringSubmatch(r.Header.Get(forwarded)); len(match) > 1 { // IPv6 addresses in Forwarded headers are quoted-strings. We strip // these quotes. addr = strings.Trim(match[1], `"`) @@ -99,7 +104,9 @@ func getScheme(r *http.Request) string { // Retrieve the scheme from X-Forwarded-Proto. if proto := r.Header.Get(xForwardedProto); proto != "" { scheme = strings.ToLower(proto) - } else if proto := r.Header.Get(forwarded); proto != "" { + } else if proto = r.Header.Get(xForwardedScheme); proto != "" { + scheme = strings.ToLower(proto) + } else if proto = r.Header.Get(forwarded); proto != "" { // match should contain at least two elements if the protocol was // specified in the Forwarded header. The first element will always be // the 'proto=' capture, which we ignore. In the case of multiple proto diff --git a/vendor/github.com/gorilla/handlers/recovery.go b/vendor/github.com/gorilla/handlers/recovery.go new file mode 100644 index 000000000..0d4f955ec --- /dev/null +++ b/vendor/github.com/gorilla/handlers/recovery.go @@ -0,0 +1,98 @@ +package handlers + +import ( + "log" + "net/http" + "runtime/debug" +) + +// RecoveryHandlerLogger is an interface used by the recovering handler to print logs. +type RecoveryHandlerLogger interface { + Println(...interface{}) +} + +type recoveryHandler struct { + handler http.Handler + logger RecoveryHandlerLogger + printStack bool +} + +// RecoveryOption provides a functional approach to define +// configuration for a handler; such as setting the logging +// whether or not to print stack traces on panic. +type RecoveryOption func(http.Handler) + +func parseRecoveryOptions(h http.Handler, opts ...RecoveryOption) http.Handler { + for _, option := range opts { + option(h) + } + + return h +} + +// RecoveryHandler is HTTP middleware that recovers from a panic, +// logs the panic, writes http.StatusInternalServerError, and +// continues to the next handler. +// +// Example: +// +// r := mux.NewRouter() +// r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { +// panic("Unexpected error!") +// }) +// +// http.ListenAndServe(":1123", handlers.RecoveryHandler()(r)) +func RecoveryHandler(opts ...RecoveryOption) func(h http.Handler) http.Handler { + return func(h http.Handler) http.Handler { + r := &recoveryHandler{handler: h} + return parseRecoveryOptions(r, opts...) + } +} + +// RecoveryLogger is a functional option to override +// the default logger. +func RecoveryLogger(logger RecoveryHandlerLogger) RecoveryOption { + return func(h http.Handler) { + r := h.(*recoveryHandler) //nolint:errcheck //TODO: + // @bharat-rajani should return type-assertion error but would break the API? + r.logger = logger + } +} + +// PrintRecoveryStack is a functional option to enable +// or disable printing stack traces on panic. +func PrintRecoveryStack(shouldPrint bool) RecoveryOption { + return func(h http.Handler) { + r := h.(*recoveryHandler) //nolint:errcheck //TODO: + // @bharat-rajani should return type-assertion error but would break the API? + r.printStack = shouldPrint + } +} + +func (h recoveryHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { + defer func() { + if err := recover(); err != nil { + w.WriteHeader(http.StatusInternalServerError) + h.log(err) + } + }() + + h.handler.ServeHTTP(w, req) +} + +func (h recoveryHandler) log(v ...interface{}) { + if h.logger != nil { + h.logger.Println(v...) + } else { + log.Println(v...) + } + + if h.printStack { + stack := string(debug.Stack()) + if h.logger != nil { + h.logger.Println(stack) + } else { + log.Println(stack) + } + } +} diff --git a/vendor/github.com/moby/sys/mount/flags_bsd.go b/vendor/github.com/moby/sys/mount/flags_bsd.go index a7f8a7195..e90f929de 100644 --- a/vendor/github.com/moby/sys/mount/flags_bsd.go +++ b/vendor/github.com/moby/sys/mount/flags_bsd.go @@ -1,5 +1,4 @@ -//go:build freebsd || openbsd -// +build freebsd openbsd +//go:build darwin || freebsd || openbsd package mount diff --git a/vendor/github.com/moby/sys/mount/flags_unix.go b/vendor/github.com/moby/sys/mount/flags_unix.go index 19fa61fcc..cf547a0fe 100644 --- a/vendor/github.com/moby/sys/mount/flags_unix.go +++ b/vendor/github.com/moby/sys/mount/flags_unix.go @@ -1,5 +1,4 @@ -//go:build !darwin && !windows -// +build !darwin,!windows +//go:build !windows package mount @@ -100,14 +99,14 @@ func MergeTmpfsOptions(options []string) ([]string, error) { } continue } - opt := strings.SplitN(option, "=", 2) - if len(opt) != 2 || !validFlags[opt[0]] { + opt, _, ok := strings.Cut(option, "=") + if !ok || !validFlags[opt] { return nil, fmt.Errorf("invalid tmpfs option %q", opt) } - if !dataCollisions[opt[0]] { + if !dataCollisions[opt] { // We prepend the option and add to collision map newOptions = append([]string{option}, newOptions...) - dataCollisions[opt[0]] = true + dataCollisions[opt] = true } } diff --git a/vendor/github.com/moby/sys/mount/mount_errors.go b/vendor/github.com/moby/sys/mount/mount_errors.go index b0d8582e8..c08bc12cd 100644 --- a/vendor/github.com/moby/sys/mount/mount_errors.go +++ b/vendor/github.com/moby/sys/mount/mount_errors.go @@ -1,5 +1,4 @@ -//go:build !darwin && !windows -// +build !darwin,!windows +//go:build !windows package mount diff --git a/vendor/github.com/moby/sys/mount/mount_unix.go b/vendor/github.com/moby/sys/mount/mount_unix.go index 4053fbbeb..4abd4ca0c 100644 --- a/vendor/github.com/moby/sys/mount/mount_unix.go +++ b/vendor/github.com/moby/sys/mount/mount_unix.go @@ -1,5 +1,4 @@ -//go:build !darwin && !windows -// +build !darwin,!windows +//go:build !windows package mount @@ -23,7 +22,7 @@ func Mount(device, target, mType, options string) error { // a normal unmount. If target is not a mount point, no error is returned. func Unmount(target string) error { err := unix.Unmount(target, mntDetach) - if err == nil || err == unix.EINVAL { //nolint:errorlint // unix errors are bare + if err == nil || err == unix.EINVAL { // Ignore "not mounted" error here. Note the same error // can be returned if flags are invalid, so this code // assumes that the flags value is always correct. @@ -71,7 +70,8 @@ func RecursiveUnmount(target string) error { if err != nil { if i == lastMount { if suberr != nil { - return fmt.Errorf("%w (possible cause: %s)", err, suberr) + // TODO: switch to %w for suberr once we stop supporting go < 1.20. + return fmt.Errorf("%w (possible cause: %s)", err, suberr.Error()) } return err } diff --git a/vendor/github.com/moby/sys/mount/mounter_freebsd.go b/vendor/github.com/moby/sys/mount/mounter_freebsd.go index 1fffb6901..14485069f 100644 --- a/vendor/github.com/moby/sys/mount/mounter_freebsd.go +++ b/vendor/github.com/moby/sys/mount/mounter_freebsd.go @@ -1,5 +1,4 @@ //go:build freebsd && cgo -// +build freebsd,cgo package mount diff --git a/vendor/github.com/moby/sys/mount/mounter_openbsd.go b/vendor/github.com/moby/sys/mount/mounter_openbsd.go index 3c0718b90..86a0b242a 100644 --- a/vendor/github.com/moby/sys/mount/mounter_openbsd.go +++ b/vendor/github.com/moby/sys/mount/mounter_openbsd.go @@ -1,5 +1,4 @@ //go:build openbsd && cgo -// +build openbsd,cgo /* Due to how OpenBSD mount(2) works, filesystem types need to be diff --git a/vendor/github.com/moby/sys/mount/mounter_unsupported.go b/vendor/github.com/moby/sys/mount/mounter_unsupported.go index b69d62bd6..17b8b650e 100644 --- a/vendor/github.com/moby/sys/mount/mounter_unsupported.go +++ b/vendor/github.com/moby/sys/mount/mounter_unsupported.go @@ -1,5 +1,4 @@ -//go:build (!linux && !freebsd && !openbsd && !windows && !darwin) || (freebsd && !cgo) || (openbsd && !cgo) -// +build !linux,!freebsd,!openbsd,!windows,!darwin freebsd,!cgo openbsd,!cgo +//go:build (!linux && !freebsd && !openbsd && !windows) || (freebsd && !cgo) || (openbsd && !cgo) package mount diff --git a/vendor/github.com/moby/sys/mountinfo/mounted_linux.go b/vendor/github.com/moby/sys/mountinfo/mounted_linux.go index e78e72619..58f13c269 100644 --- a/vendor/github.com/moby/sys/mountinfo/mounted_linux.go +++ b/vendor/github.com/moby/sys/mountinfo/mounted_linux.go @@ -51,7 +51,7 @@ func mountedByOpenat2(path string) (bool, error) { Resolve: unix.RESOLVE_NO_XDEV, }) _ = unix.Close(dirfd) - switch err { //nolint:errorlint // unix errors are bare + switch err { case nil: // definitely not a mount _ = unix.Close(fd) return false, nil diff --git a/vendor/github.com/tonistiigi/fsutil/.gitignore b/vendor/github.com/tonistiigi/fsutil/.gitignore index e5c343e2d..51b9602c8 100644 --- a/vendor/github.com/tonistiigi/fsutil/.gitignore +++ b/vendor/github.com/tonistiigi/fsutil/.gitignore @@ -1,5 +1,9 @@ # if you want to ignore files created by your editor/tools, consider using a # global .gitignore or .git/info/exclude see https://help.github.com/articles/ignoring-files -bin/ +.* +!.github +!.gitignore +!.travis.yml +*.prof # support running go modules in vendor mode for local development vendor/ diff --git a/vendor/github.com/tonistiigi/fsutil/.golangci.yml b/vendor/github.com/tonistiigi/fsutil/.golangci.yml index 7300a0e58..2a8b86ae2 100644 --- a/vendor/github.com/tonistiigi/fsutil/.golangci.yml +++ b/vendor/github.com/tonistiigi/fsutil/.golangci.yml @@ -14,17 +14,3 @@ linters: - staticcheck - typecheck disable-all: true - -linters-settings: - depguard: - rules: - main: - deny: - # The io/ioutil package has been deprecated. - # https://go.dev/doc/go1.16#ioutil - - pkg: "io/ioutil" - desc: The io/ioutil package has been deprecated. - -# show all -max-issues-per-linter: 0 -max-same-issues: 0 diff --git a/vendor/github.com/tonistiigi/fsutil/Dockerfile b/vendor/github.com/tonistiigi/fsutil/Dockerfile index 21c1f39f6..9584648d0 100644 --- a/vendor/github.com/tonistiigi/fsutil/Dockerfile +++ b/vendor/github.com/tonistiigi/fsutil/Dockerfile @@ -1,9 +1,7 @@ -# syntax=docker/dockerfile:1 +#syntax=docker/dockerfile:1 +ARG GO_VERSION=1.20 -ARG GO_VERSION=1.21 -ARG XX_VERSION=1.4.0 - -FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx +FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.1.0 AS xx FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS base RUN apk add --no-cache git @@ -20,19 +18,13 @@ FROM base AS test ARG TESTFLAGS RUN --mount=target=. --mount=target=/go/pkg/mod,type=cache \ --mount=target=/root/.cache,type=cache \ - CGO_ENABLED=0 xx-go test -v -coverprofile=/tmp/coverage.txt -covermode=atomic ${TESTFLAGS} ./... + CGO_ENABLED=0 xx-go test -test.v ${TESTFLAGS} ./... FROM base AS test-noroot RUN mkdir /go/pkg && chmod 0777 /go/pkg USER 1000:1000 RUN --mount=target=. \ --mount=target=/tmp/.cache,type=cache \ - CGO_ENABLED=0 GOCACHE=/tmp/gocache xx-go test -v -coverprofile=/tmp/coverage.txt -covermode=atomic ./... - -FROM scratch AS test-coverage -COPY --from=test /tmp/coverage.txt /coverage-root.txt - -FROM scratch AS test-noroot-coverage -COPY --from=test-noroot /tmp/coverage.txt /coverage-noroot.txt + CGO_ENABLED=0 GOCACHE=/tmp/gocache xx-go test -test.v ./... FROM build diff --git a/vendor/github.com/tonistiigi/fsutil/codecov.yml b/vendor/github.com/tonistiigi/fsutil/codecov.yml deleted file mode 100644 index f5f9e02cc..000000000 --- a/vendor/github.com/tonistiigi/fsutil/codecov.yml +++ /dev/null @@ -1,12 +0,0 @@ -comment: false - -coverage: - status: - project: # settings affecting project coverage - default: - target: auto # auto % coverage target - threshold: 1% # allow for 1% reduction of coverage without failing - patch: off - -github_checks: - annotations: false diff --git a/vendor/github.com/tonistiigi/fsutil/copy/copy.go b/vendor/github.com/tonistiigi/fsutil/copy/copy.go index f8cc0a433..558c553f7 100644 --- a/vendor/github.com/tonistiigi/fsutil/copy/copy.go +++ b/vendor/github.com/tonistiigi/fsutil/copy/copy.go @@ -88,7 +88,7 @@ func Copy(ctx context.Context, srcRoot, src, dstRoot, dst string, opts ...Opt) e return err } - c, err := newCopier(dstRoot, ci.Chown, ci.Utime, ci.Mode, ci.XAttrErrorHandler, ci.IncludePatterns, ci.ExcludePatterns, ci.AlwaysReplaceExistingDestPaths, ci.ChangeFunc) + c, err := newCopier(dstRoot, ci.Chown, ci.Utime, ci.Mode, ci.XAttrErrorHandler, ci.IncludePatterns, ci.ExcludePatterns, ci.ChangeFunc) if err != nil { return err } @@ -172,11 +172,7 @@ type CopyInfo struct { IncludePatterns []string // Exclude files/dir matching any of these patterns (even if they match an include pattern) ExcludePatterns []string - // If true, any source path that overwrite existing destination paths will always replace - // the existing destination path, even if they are of different types (e.g. a directory will - // replace any existing symlink or file) - AlwaysReplaceExistingDestPaths bool - ChangeFunc fsutil.ChangeFunc + ChangeFunc fsutil.ChangeFunc } type Opt func(*CopyInfo) @@ -231,17 +227,16 @@ func WithChangeNotifier(fn fsutil.ChangeFunc) Opt { } type copier struct { - chown Chowner - utime *time.Time - mode *int - inodes map[uint64]string - xattrErrorHandler XAttrErrorHandler - includePatternMatcher *patternmatcher.PatternMatcher - excludePatternMatcher *patternmatcher.PatternMatcher - parentDirs []parentDir - changefn fsutil.ChangeFunc - root string - alwaysReplaceExistingDestPaths bool + chown Chowner + utime *time.Time + mode *int + inodes map[uint64]string + xattrErrorHandler XAttrErrorHandler + includePatternMatcher *patternmatcher.PatternMatcher + excludePatternMatcher *patternmatcher.PatternMatcher + parentDirs []parentDir + changefn fsutil.ChangeFunc + root string } type parentDir struct { @@ -250,7 +245,7 @@ type parentDir struct { copied bool } -func newCopier(root string, chown Chowner, tm *time.Time, mode *int, xeh XAttrErrorHandler, includePatterns, excludePatterns []string, alwaysReplaceExistingDestPaths bool, changeFunc fsutil.ChangeFunc) (*copier, error) { +func newCopier(root string, chown Chowner, tm *time.Time, mode *int, xeh XAttrErrorHandler, includePatterns, excludePatterns []string, changeFunc fsutil.ChangeFunc) (*copier, error) { if xeh == nil { xeh = func(dst, src, key string, err error) error { return err @@ -276,16 +271,15 @@ func newCopier(root string, chown Chowner, tm *time.Time, mode *int, xeh XAttrEr } return &copier{ - root: root, - inodes: map[uint64]string{}, - chown: chown, - utime: tm, - xattrErrorHandler: xeh, - mode: mode, - includePatternMatcher: includePatternMatcher, - excludePatternMatcher: excludePatternMatcher, - changefn: changeFunc, - alwaysReplaceExistingDestPaths: alwaysReplaceExistingDestPaths, + root: root, + inodes: map[uint64]string{}, + chown: chown, + utime: tm, + xattrErrorHandler: xeh, + mode: mode, + includePatternMatcher: includePatternMatcher, + excludePatternMatcher: excludePatternMatcher, + changefn: changeFunc, }, nil } @@ -330,10 +324,6 @@ func (c *copier) copy(ctx context.Context, src, srcComponents, target string, ov } if include { - if err := c.removeTargetIfNeeded(src, target, fi, targetFi); err != nil { - return err - } - if err := c.createParentDirs(src, srcComponents, target, overwriteTargetMetadata); err != nil { return err } @@ -450,21 +440,6 @@ func (c *copier) exclude(path string, fi os.FileInfo, parentExcludeMatchInfo pat return m, matchInfo, nil } -func (c *copier) removeTargetIfNeeded(src, target string, srcFi, targetFi os.FileInfo) error { - if !c.alwaysReplaceExistingDestPaths { - return nil - } - if targetFi == nil { - // already doesn't exist - return nil - } - if srcFi.IsDir() && targetFi.IsDir() { - // directories are merged, not replaced - return nil - } - return os.RemoveAll(target) -} - // Delayed creation of parent directories when a file or dir matches an include // pattern. func (c *copier) createParentDirs(src, srcComponents, target string, overwriteTargetMetadata bool) error { diff --git a/vendor/github.com/tonistiigi/fsutil/copy/copy_darwin.go b/vendor/github.com/tonistiigi/fsutil/copy/copy_darwin.go index 0cdc00a82..bc93b21ce 100644 --- a/vendor/github.com/tonistiigi/fsutil/copy/copy_darwin.go +++ b/vendor/github.com/tonistiigi/fsutil/copy/copy_darwin.go @@ -13,7 +13,7 @@ import ( func copyFile(source, target string) error { if err := unix.Clonefileat(unix.AT_FDCWD, source, unix.AT_FDCWD, target, unix.CLONE_NOFOLLOW); err != nil { - if err != unix.EINVAL && err != unix.EXDEV { + if err != unix.EINVAL { return err } } else { diff --git a/vendor/github.com/tonistiigi/fsutil/copy/copy_linux.go b/vendor/github.com/tonistiigi/fsutil/copy/copy_linux.go index 6d9b490c6..971cb5c5d 100644 --- a/vendor/github.com/tonistiigi/fsutil/copy/copy_linux.go +++ b/vendor/github.com/tonistiigi/fsutil/copy/copy_linux.go @@ -30,16 +30,7 @@ func (c *copier) copyFileInfo(fi os.FileInfo, src, name string) error { m := fi.Mode() if c.mode != nil { - m = os.FileMode(*c.mode).Perm() - if *c.mode&syscall.S_ISGID != 0 { - m |= os.ModeSetgid - } - if *c.mode&syscall.S_ISUID != 0 { - m |= os.ModeSetuid - } - if *c.mode&syscall.S_ISVTX != 0 { - m |= os.ModeSticky - } + m = (m & ^os.FileMode(0777)) | os.FileMode(*c.mode&0777) } if (fi.Mode() & os.ModeSymlink) != os.ModeSymlink { if err := os.Chmod(name, m); err != nil { diff --git a/vendor/github.com/tonistiigi/fsutil/copy/copy_unix.go b/vendor/github.com/tonistiigi/fsutil/copy/copy_unix.go index 4a7d0c86b..945e96c5f 100644 --- a/vendor/github.com/tonistiigi/fsutil/copy/copy_unix.go +++ b/vendor/github.com/tonistiigi/fsutil/copy/copy_unix.go @@ -31,16 +31,7 @@ func (c *copier) copyFileInfo(fi os.FileInfo, src, name string) error { m := fi.Mode() if c.mode != nil { - m = os.FileMode(*c.mode).Perm() - if *c.mode&syscall.S_ISGID != 0 { - m |= os.ModeSetgid - } - if *c.mode&syscall.S_ISUID != 0 { - m |= os.ModeSetuid - } - if *c.mode&syscall.S_ISVTX != 0 { - m |= os.ModeSticky - } + m = (m & ^os.FileMode(0777)) | os.FileMode(*c.mode&0777) } if (fi.Mode() & os.ModeSymlink) != os.ModeSymlink { if err := os.Chmod(name, m); err != nil { diff --git a/vendor/github.com/tonistiigi/fsutil/diff_containerd.go b/vendor/github.com/tonistiigi/fsutil/diff_containerd.go index 86d646027..d8619abf1 100644 --- a/vendor/github.com/tonistiigi/fsutil/diff_containerd.go +++ b/vendor/github.com/tonistiigi/fsutil/diff_containerd.go @@ -5,7 +5,6 @@ import ( "context" "io" "os" - "path/filepath" "strings" "github.com/tonistiigi/fsutil/types" @@ -128,7 +127,7 @@ func doubleWalkDiff(ctx context.Context, changeFn ChangeFunc, a, b walkerFn, fil f1 = nil continue } else if rmdir == "" && f1.stat.IsDir() { - rmdir = f1.path + string(filepath.Separator) + rmdir = f1.path + string(os.PathSeparator) } else if rmdir != "" { rmdir = "" } @@ -139,7 +138,7 @@ func doubleWalkDiff(ctx context.Context, changeFn ChangeFunc, a, b walkerFn, fil return err } if f1.stat.IsDir() && !f2copy.stat.IsDir() { - rmdir = f1.path + string(filepath.Separator) + rmdir = f1.path + string(os.PathSeparator) } else if rmdir != "" { rmdir = "" } diff --git a/vendor/github.com/tonistiigi/fsutil/diskwriter.go b/vendor/github.com/tonistiigi/fsutil/diskwriter.go index a62c6b0c9..10b608513 100644 --- a/vendor/github.com/tonistiigi/fsutil/diskwriter.go +++ b/vendor/github.com/tonistiigi/fsutil/diskwriter.go @@ -37,7 +37,6 @@ type DiskWriter struct { ctx context.Context cancel func() eg *errgroup.Group - egCtx context.Context filter FilterFunc dirModTimes map[string]int64 } @@ -51,14 +50,13 @@ func NewDiskWriter(ctx context.Context, dest string, opt DiskWriterOpt) (*DiskWr } ctx, cancel := context.WithCancel(ctx) - eg, egCtx := errgroup.WithContext(ctx) + eg, ctx := errgroup.WithContext(ctx) return &DiskWriter{ opt: opt, dest: dest, eg: eg, ctx: ctx, - egCtx: egCtx, cancel: cancel, filter: opt.Filter, dirModTimes: map[string]int64{}, @@ -100,7 +98,7 @@ func (dw *DiskWriter) HandleChange(kind ChangeKind, p string, fi os.FileInfo, er } }() - destPath := filepath.Join(dw.dest, p) + destPath := filepath.Join(dw.dest, filepath.FromSlash(p)) if kind == ChangeKindDelete { if dw.filter != nil { @@ -185,12 +183,12 @@ func (dw *DiskWriter) HandleChange(kind ChangeKind, p string, fi os.FileInfo, er } default: isRegularFile = true - file, err := os.OpenFile(newPath, os.O_CREATE|os.O_WRONLY, fi.Mode()) + file, err := os.OpenFile(newPath, os.O_CREATE|os.O_WRONLY, fi.Mode()) //todo: windows if err != nil { return errors.Wrapf(err, "failed to create %s", newPath) } if dw.opt.SyncDataCb != nil { - if err := dw.processChange(dw.ctx, ChangeKindAdd, p, fi, file); err != nil { + if err := dw.processChange(ChangeKindAdd, p, fi, file); err != nil { file.Close() return err } @@ -221,7 +219,7 @@ func (dw *DiskWriter) HandleChange(kind ChangeKind, p string, fi os.FileInfo, er dw.requestAsyncFileData(p, destPath, fi, &statCopy) } } else { - return dw.processChange(dw.ctx, kind, p, fi, nil) + return dw.processChange(kind, p, fi, nil) } return nil @@ -230,7 +228,7 @@ func (dw *DiskWriter) HandleChange(kind ChangeKind, p string, fi os.FileInfo, er func (dw *DiskWriter) requestAsyncFileData(p, dest string, fi os.FileInfo, st *types.Stat) { // todo: limit worker threads dw.eg.Go(func() error { - if err := dw.processChange(dw.egCtx, ChangeKindAdd, p, fi, &lazyFileWriter{ + if err := dw.processChange(ChangeKindAdd, p, fi, &lazyFileWriter{ dest: dest, }); err != nil { return err @@ -239,7 +237,7 @@ func (dw *DiskWriter) requestAsyncFileData(p, dest string, fi os.FileInfo, st *t }) } -func (dw *DiskWriter) processChange(ctx context.Context, kind ChangeKind, p string, fi os.FileInfo, w io.WriteCloser) error { +func (dw *DiskWriter) processChange(kind ChangeKind, p string, fi os.FileInfo, w io.WriteCloser) error { origw := w var hw *hashedWriter if dw.opt.NotifyCb != nil { @@ -254,7 +252,7 @@ func (dw *DiskWriter) processChange(ctx context.Context, kind ChangeKind, p stri if fn == nil && dw.opt.AsyncDataCb != nil { fn = dw.opt.AsyncDataCb } - if err := fn(ctx, p, w); err != nil { + if err := fn(dw.ctx, p, w); err != nil { return err } } else { @@ -315,7 +313,7 @@ type lazyFileWriter struct { func (lfw *lazyFileWriter) Write(dt []byte) (int, error) { if lfw.f == nil { - file, err := os.OpenFile(lfw.dest, os.O_WRONLY, 0) + file, err := os.OpenFile(lfw.dest, os.O_WRONLY, 0) //todo: windows if os.IsPermission(err) { // retry after chmod fi, er := os.Stat(lfw.dest) diff --git a/vendor/github.com/tonistiigi/fsutil/docker-bake.hcl b/vendor/github.com/tonistiigi/fsutil/docker-bake.hcl index 48127d4ff..6ba3c8672 100644 --- a/vendor/github.com/tonistiigi/fsutil/docker-bake.hcl +++ b/vendor/github.com/tonistiigi/fsutil/docker-bake.hcl @@ -1,9 +1,5 @@ variable "GO_VERSION" { - default = null -} - -variable "DESTDIR" { - default = "./bin" + default = "1.20" } group "default" { @@ -22,14 +18,12 @@ group "test" { target "test-root" { inherits = ["build"] - target = "test-coverage" - output = ["${DESTDIR}/coverage"] + target = "test" } target "test-noroot" { inherits = ["build"] - target = "test-noroot-coverage" - output = ["${DESTDIR}/coverage"] + target = "test-noroot" } target "lint" { diff --git a/vendor/github.com/tonistiigi/fsutil/filter.go b/vendor/github.com/tonistiigi/fsutil/filter.go index 483980091..1925146c2 100644 --- a/vendor/github.com/tonistiigi/fsutil/filter.go +++ b/vendor/github.com/tonistiigi/fsutil/filter.go @@ -68,9 +68,9 @@ type filterFS struct { // NewFilterFS creates a new FS that filters the given FS using the given // FilterOpt. -// + // The returned FS will not contain any paths that do not match the provided -// include and exclude patterns, or that are are excluded using the mapping +// include and exclude patterns, or that are are exlcluded using the mapping // function. // // The FS is assumed to be a snapshot of the filesystem at the time of the @@ -98,7 +98,7 @@ func NewFilterFS(fs FS, opt *FilterOpt) (FS, error) { } patternChars := "*[]?^" - if filepath.Separator != '\\' { + if os.PathSeparator != '\\' { patternChars += `\` } @@ -179,7 +179,6 @@ func (fs *filterFS) Walk(ctx context.Context, target string, fn gofs.WalkDirFunc includeMatchInfo patternmatcher.MatchInfo excludeMatchInfo patternmatcher.MatchInfo calledFn bool - skipFn bool } // used only for include/exclude handling @@ -340,9 +339,6 @@ func (fs *filterFS) Walk(ctx context.Context, target string, fn gofs.WalkDirFunc } } for i, parentDir := range parentDirs { - if parentDir.skipFn { - return filepath.SkipDir - } if parentDir.calledFn { continue } @@ -362,21 +358,15 @@ func (fs *filterFS) Walk(ctx context.Context, target string, fn gofs.WalkDirFunc } if fs.mapFn != nil { result := fs.mapFn(parentStat.Path, parentStat) - if result == MapResultExclude { + if result == MapResultSkipDir || result == MapResultExclude { continue - } else if result == MapResultSkipDir { - parentDirs[i].skipFn = true - return filepath.SkipDir } } - parentDirs[i].calledFn = true - if err := fn(parentStat.Path, &DirEntryInfo{Stat: parentStat}, nil); err == filepath.SkipDir { - parentDirs[i].skipFn = true - return filepath.SkipDir - } else if err != nil { + if err := fn(parentStat.Path, &DirEntryInfo{Stat: parentStat}, nil); err != nil { return err } + parentDirs[i].calledFn = true } if err := fn(stat.Path, &DirEntryInfo{Stat: stat}, nil); err != nil { return err diff --git a/vendor/github.com/tonistiigi/fsutil/followlinks.go b/vendor/github.com/tonistiigi/fsutil/followlinks.go index 559291d79..3a0bd2bb7 100644 --- a/vendor/github.com/tonistiigi/fsutil/followlinks.go +++ b/vendor/github.com/tonistiigi/fsutil/followlinks.go @@ -137,8 +137,8 @@ func (r *symlinkResolver) readSymlink(p string, allowWildcard bool) ([]string, e func statFile(fs FS, root string) (os.DirEntry, error) { var out os.DirEntry - root = filepath.FromSlash(filepath.Clean(root)) - if root == string(filepath.Separator) || root == "." { + root = filepath.Clean(root) + if root == "/" || root == "." { return nil, nil } @@ -168,8 +168,8 @@ func statFile(fs FS, root string) (os.DirEntry, error) { func readDir(fs FS, root string) ([]os.DirEntry, error) { var out []os.DirEntry - root = filepath.FromSlash(filepath.Clean(root)) - if root == string(filepath.Separator) || root == "." { + root = filepath.Clean(root) + if root == "/" || root == "." { root = "." out = make([]gofs.DirEntry, 0) } diff --git a/vendor/github.com/tonistiigi/fsutil/hardlinks.go b/vendor/github.com/tonistiigi/fsutil/hardlinks.go index d9bf2fc1c..ef8bbfb5d 100644 --- a/vendor/github.com/tonistiigi/fsutil/hardlinks.go +++ b/vendor/github.com/tonistiigi/fsutil/hardlinks.go @@ -1,9 +1,6 @@ package fsutil import ( - "context" - "io" - gofs "io/fs" "os" "syscall" @@ -49,68 +46,3 @@ func (v *Hardlinks) HandleChange(kind ChangeKind, p string, fi os.FileInfo, err return nil } - -// WithHardlinkReset returns a FS that fixes hardlinks for FS that has been filtered -// so that original hardlink sources might be missing -func WithHardlinkReset(fs FS) FS { - return &hardlinkFilter{fs: fs} -} - -type hardlinkFilter struct { - fs FS -} - -var _ FS = &hardlinkFilter{} - -func (r *hardlinkFilter) Walk(ctx context.Context, target string, fn gofs.WalkDirFunc) error { - seenFiles := make(map[string]string) - return r.fs.Walk(ctx, target, func(path string, entry gofs.DirEntry, err error) error { - if err != nil { - return err - } - - fi, err := entry.Info() - if err != nil { - return err - } - - if fi.IsDir() || fi.Mode()&os.ModeSymlink != 0 { - return fn(path, entry, nil) - } - - stat, ok := fi.Sys().(*types.Stat) - if !ok { - return errors.WithStack(&os.PathError{Path: path, Err: syscall.EBADMSG, Op: "fileinfo without stat info"}) - } - - if stat.Linkname != "" { - if v, ok := seenFiles[stat.Linkname]; !ok { - seenFiles[stat.Linkname] = stat.Path - stat.Linkname = "" - entry = &dirEntryWithStat{DirEntry: entry, stat: stat} - } else { - if v != stat.Path { - stat.Linkname = v - entry = &dirEntryWithStat{DirEntry: entry, stat: stat} - } - } - } - - seenFiles[path] = stat.Path - - return fn(path, entry, nil) - }) -} - -func (r *hardlinkFilter) Open(p string) (io.ReadCloser, error) { - return r.fs.Open(p) -} - -type dirEntryWithStat struct { - gofs.DirEntry - stat *types.Stat -} - -func (d *dirEntryWithStat) Info() (gofs.FileInfo, error) { - return &StatInfo{d.stat}, nil -} diff --git a/vendor/github.com/tonistiigi/fsutil/readme.md b/vendor/github.com/tonistiigi/fsutil/readme.md index c41716887..5ce685b7e 100644 --- a/vendor/github.com/tonistiigi/fsutil/readme.md +++ b/vendor/github.com/tonistiigi/fsutil/readme.md @@ -1,8 +1,3 @@ -[![PkgGoDev](https://img.shields.io/badge/go.dev-docs-007d9c?style=flat-square&logo=go&logoColor=white)](https://pkg.go.dev/github.com/tonistiigi/fsutil) -[![CI Status](https://img.shields.io/github/actions/workflow/status/tonistiigi/fsutil/ci.yml?label=ci&logo=github&style=flat-square)](https://github.com/tonistiigi/fsutil/actions?query=workflow%3Aci) -[![Go Report Card](https://goreportcard.com/badge/github.com/tonistiigi/fsutil?style=flat-square)](https://goreportcard.com/report/github.com/tonistiigi/fsutil) -[![Codecov](https://img.shields.io/codecov/c/github/tonistiigi/fsutil?logo=codecov&style=flat-square)](https://codecov.io/gh/tonistiigi/fsutil) - Incremental file directory sync tools in golang. ``` diff --git a/vendor/github.com/tonistiigi/fsutil/receive.go b/vendor/github.com/tonistiigi/fsutil/receive.go index 6f750752a..9924ce072 100644 --- a/vendor/github.com/tonistiigi/fsutil/receive.go +++ b/vendor/github.com/tonistiigi/fsutil/receive.go @@ -1,42 +1,10 @@ -// send.go and receive.go describe the fsutil file-transfer protocol, which -// allows transferring file trees across a network connection. -// -// The protocol operates as follows: -// - The client (the receiver) connects to the server (the sender). -// - The sender walks the target tree lexicographically and sends a series of -// STAT packets that describe each file (an empty stat indicates EOF). -// - The receiver sends a REQ packet for each file it requires the contents for, -// using the ID for the file (determined as its index in the STAT sequence). -// - The sender sends a DATA packet with byte arrays for the contents of the -// file, associated with an ID (an empty array indicates EOF). -// - Once the receiver has received all files it wants, it sends a FIN packet, -// and the file transfer is complete. -// If an error is encountered on either side, an ERR packet is sent containing -// a human-readable error. -// -// All paths transferred over the protocol are normalized to unix-style paths, -// regardless of which platforms are present on either side. These path -// conversions are performed right before sending a STAT packet (for the -// sender) or right after receiving the corresponding STAT packet (for the -// receiver); this abstraction doesn't leak into the rest of fsutil, which -// operates on native platform-specific paths. -// -// Note that in the case of cross-platform file transfers, the transfer is -// best-effort. Some filenames that are valid on a unix sender would not be -// valid on a windows receiver, so these paths are rejected as they are -// received. Additionally, file metadata, like user/group owners and xattrs do -// not have an exact correspondence on windows, and so would be discarded by -// a windows receiver. - package fsutil import ( "context" "io" "os" - "path/filepath" "sync" - "syscall" "github.com/pkg/errors" "github.com/tonistiigi/fsutil/types" @@ -221,30 +189,16 @@ func (r *receiver) run(ctx context.Context) error { } break } -<<<<<<< HEAD if r.verboseProgressCb != nil { r.verboseProgressCb(p.Stat.Path, StatusStat, p.Size()) } -======= - - // normalize unix wire-specific paths to platform-specific paths - path := filepath.FromSlash(p.Stat.Path) - if filepath.ToSlash(path) != p.Stat.Path { - // e.g. a linux path foo/bar\baz cannot be represented on windows - return errors.WithStack(&os.PathError{Path: p.Stat.Path, Err: syscall.EINVAL, Op: "unrepresentable path"}) - } - p.Stat.Path = path - p.Stat.Linkname = filepath.FromSlash(p.Stat.Linkname) - ->>>>>>> v0.13.2 if fileCanRequestData(os.FileMode(p.Stat.Mode)) { r.mu.Lock() r.files[p.Stat.Path] = i r.mu.Unlock() } i++ - - cp := ¤tPath{path: path, stat: p.Stat} + cp := ¤tPath{path: p.Stat.Path, stat: p.Stat} if err := r.orderValidator.HandleChange(ChangeKindAdd, cp.path, &StatInfo{cp.stat}, nil); err != nil { return err } diff --git a/vendor/github.com/tonistiigi/fsutil/send.go b/vendor/github.com/tonistiigi/fsutil/send.go index 62a6118b7..7fe01a07e 100644 --- a/vendor/github.com/tonistiigi/fsutil/send.go +++ b/vendor/github.com/tonistiigi/fsutil/send.go @@ -4,7 +4,6 @@ import ( "context" "io" "os" - "path/filepath" "sync" "syscall" @@ -28,20 +27,12 @@ type Stream interface { func Send(ctx context.Context, conn Stream, fs FS, progressCb func(int, bool), verboseProgressCb VerboseProgressCB) error { s := &sender{ -<<<<<<< HEAD conn: &syncStream{Stream: conn}, fs: fs, files: make(map[uint32]string), progressCb: progressCb, verboseProgressCb: verboseProgressCb, sendpipeline: make(chan *sendHandle, 128), -======= - conn: &syncStream{Stream: conn}, - fs: WithHardlinkReset(fs), - files: make(map[uint32]string), - progressCb: progressCb, - sendpipeline: make(chan *sendHandle, 128), ->>>>>>> v0.13.2 } return s.run(ctx) } @@ -57,13 +48,8 @@ type sender struct { files map[uint32]string mu sync.RWMutex progressCb func(int, bool) -<<<<<<< HEAD verboseProgressCb VerboseProgressCB progressCurrent int -======= - progressCurrent int - progressCurrentMu sync.Mutex ->>>>>>> v0.13.2 sendpipeline chan *sendHandle } @@ -130,12 +116,6 @@ func (s *sender) updateProgress(size int, last bool) { defer s.mu.Unlock() s.progressCurrent += size if s.progressCb != nil { -<<<<<<< HEAD -======= - s.progressCurrentMu.Lock() - defer s.progressCurrentMu.Unlock() - s.progressCurrent += size ->>>>>>> v0.13.2 s.progressCb(s.progressCurrent, last) } } @@ -184,8 +164,7 @@ func (s *sender) walk(ctx context.Context) error { if !ok { return errors.WithStack(&os.PathError{Path: path, Err: syscall.EBADMSG, Op: "fileinfo without stat info"}) } - stat.Path = filepath.ToSlash(stat.Path) - stat.Linkname = filepath.ToSlash(stat.Linkname) + p := &types.Packet{ Type: types.PACKET_STAT, Stat: stat, diff --git a/vendor/github.com/tonistiigi/fsutil/stat.go b/vendor/github.com/tonistiigi/fsutil/stat.go index 44441cb65..2ab8da118 100644 --- a/vendor/github.com/tonistiigi/fsutil/stat.go +++ b/vendor/github.com/tonistiigi/fsutil/stat.go @@ -19,7 +19,7 @@ func mkstat(path, relpath string, fi os.FileInfo, inodemap map[uint64]string) (* relpath = filepath.ToSlash(relpath) stat := &types.Stat{ - Path: filepath.FromSlash(relpath), + Path: relpath, Mode: uint32(fi.Mode()), ModTime: fi.ModTime().UnixNano(), } diff --git a/vendor/github.com/tonistiigi/fsutil/validator.go b/vendor/github.com/tonistiigi/fsutil/validator.go index 8b0dd91ec..9bd7d94d3 100644 --- a/vendor/github.com/tonistiigi/fsutil/validator.go +++ b/vendor/github.com/tonistiigi/fsutil/validator.go @@ -2,7 +2,8 @@ package fsutil import ( "os" - "path/filepath" + "path" + "runtime" "sort" "strings" "syscall" @@ -27,18 +28,21 @@ func (v *Validator) HandleChange(kind ChangeKind, p string, fi os.FileInfo, err if v.parentDirs == nil { v.parentDirs = make([]parent, 1, 10) } - if p != filepath.Clean(p) { + if runtime.GOOS == "windows" { + p = strings.Replace(p, "\\", "", -1) + } + if p != path.Clean(p) { return errors.WithStack(&os.PathError{Path: p, Err: syscall.EINVAL, Op: "unclean path"}) } - if filepath.IsAbs(p) { + if path.IsAbs(p) { return errors.WithStack(&os.PathError{Path: p, Err: syscall.EINVAL, Op: "absolute path"}) } - dir := filepath.Dir(p) - base := filepath.Base(p) + dir := path.Dir(p) + base := path.Base(p) if dir == "." { dir = "" } - if dir == ".." || strings.HasPrefix(p, filepath.FromSlash("../")) { + if dir == ".." || strings.HasPrefix(p, "../") { return errors.WithStack(&os.PathError{Path: p, Err: syscall.EINVAL, Op: "escape check"}) } @@ -52,12 +56,12 @@ func (v *Validator) HandleChange(kind ChangeKind, p string, fi os.FileInfo, err } if dir != v.parentDirs[len(v.parentDirs)-1].dir || v.parentDirs[i].last >= base { - return errors.Errorf("changes out of order: %q %q", p, filepath.Join(v.parentDirs[i].dir, v.parentDirs[i].last)) + return errors.Errorf("changes out of order: %q %q", p, path.Join(v.parentDirs[i].dir, v.parentDirs[i].last)) } v.parentDirs[i].last = base if kind != ChangeKindDelete && fi.IsDir() { v.parentDirs = append(v.parentDirs, parent{ - dir: filepath.Join(dir, base), + dir: path.Join(dir, base), last: "", }) } @@ -72,7 +76,7 @@ func ComparePath(p1, p2 string) int { switch { case p1[i] == p2[i]: continue - case p2[i] != filepath.Separator && p1[i] < p2[i] || p1[i] == filepath.Separator: + case p2[i] != '/' && p1[i] < p2[i] || p1[i] == '/': return -1 default: return 1 diff --git a/vendor/golang.org/x/net/context/go17.go b/vendor/golang.org/x/net/context/go17.go index 2cb9c408f..0c1b86793 100644 --- a/vendor/golang.org/x/net/context/go17.go +++ b/vendor/golang.org/x/net/context/go17.go @@ -3,7 +3,6 @@ // license that can be found in the LICENSE file. //go:build go1.7 -// +build go1.7 package context diff --git a/vendor/golang.org/x/net/context/go19.go b/vendor/golang.org/x/net/context/go19.go index 64d31ecc3..e31e35a90 100644 --- a/vendor/golang.org/x/net/context/go19.go +++ b/vendor/golang.org/x/net/context/go19.go @@ -3,7 +3,6 @@ // license that can be found in the LICENSE file. //go:build go1.9 -// +build go1.9 package context diff --git a/vendor/golang.org/x/net/context/pre_go17.go b/vendor/golang.org/x/net/context/pre_go17.go index 7b6b68511..065ff3dfa 100644 --- a/vendor/golang.org/x/net/context/pre_go17.go +++ b/vendor/golang.org/x/net/context/pre_go17.go @@ -3,7 +3,6 @@ // license that can be found in the LICENSE file. //go:build !go1.7 -// +build !go1.7 package context diff --git a/vendor/golang.org/x/net/context/pre_go19.go b/vendor/golang.org/x/net/context/pre_go19.go index 1f9715341..ec5a63803 100644 --- a/vendor/golang.org/x/net/context/pre_go19.go +++ b/vendor/golang.org/x/net/context/pre_go19.go @@ -3,7 +3,6 @@ // license that can be found in the LICENSE file. //go:build !go1.9 -// +build !go1.9 package context diff --git a/vendor/modules.txt b/vendor/modules.txt index f55334bc9..6eb24506e 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -453,7 +453,6 @@ github.com/docker/cli/cli/config/configfile github.com/docker/cli/cli/config/credentials github.com/docker/cli/cli/config/types github.com/docker/cli/cli/connhelper/commandconn -<<<<<<< HEAD # github.com/docker/distribution v2.8.2+incompatible ## explicit github.com/docker/distribution @@ -493,10 +492,7 @@ github.com/docker/distribution/registry/storage/driver/factory github.com/docker/distribution/registry/storage/driver/middleware github.com/docker/distribution/uuid github.com/docker/distribution/version -# github.com/docker/docker v24.0.0-rc.2.0.20230905130451-032797ea4bcb+incompatible -======= # github.com/docker/docker v25.0.3+incompatible ->>>>>>> v0.13.2 ## explicit github.com/docker/docker/api github.com/docker/docker/api/types @@ -551,29 +547,21 @@ github.com/docker/go-metrics # github.com/docker/go-units v0.5.0 ## explicit github.com/docker/go-units -<<<<<<< HEAD -# github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 +# github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 ## explicit github.com/docker/libtrust -# github.com/felixge/httpsnoop v1.0.3 -## explicit; go 1.13 -github.com/felixge/httpsnoop -# github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7 -## explicit -github.com/garyburd/redigo/internal -github.com/garyburd/redigo/redis -# github.com/go-logr/logr v1.2.3 -## explicit; go 1.16 -======= # github.com/felixge/fgprof v0.9.3 ## explicit; go 1.14 github.com/felixge/fgprof # github.com/felixge/httpsnoop v1.0.4 ## explicit; go 1.13 github.com/felixge/httpsnoop +# github.com/garyburd/redigo v1.6.4 +## explicit; go 1.17 +github.com/garyburd/redigo/internal +github.com/garyburd/redigo/redis # github.com/go-logr/logr v1.3.0 ## explicit; go 1.18 ->>>>>>> v0.13.2 github.com/go-logr/logr github.com/go-logr/logr/funcr # github.com/go-logr/stdr v1.2.2 @@ -649,8 +637,8 @@ github.com/google/shlex # github.com/google/uuid v1.5.0 ## explicit github.com/google/uuid -# github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33 -## explicit +# github.com/gorilla/handlers v1.5.2 +## explicit; go 1.20 github.com/gorilla/handlers # github.com/gorilla/mux v1.8.0 ## explicit; go 1.12 @@ -658,14 +646,10 @@ github.com/gorilla/mux # github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 ## explicit; go 1.14 github.com/grpc-ecosystem/go-grpc-middleware -<<<<<<< HEAD github.com/grpc-ecosystem/go-grpc-middleware/retry github.com/grpc-ecosystem/go-grpc-middleware/util/backoffutils github.com/grpc-ecosystem/go-grpc-middleware/util/metautils -# github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 -======= # github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 ->>>>>>> v0.13.2 ## explicit; go 1.17 github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule github.com/grpc-ecosystem/grpc-gateway/v2/runtime @@ -733,11 +717,11 @@ github.com/moby/locker ## explicit; go 1.19 github.com/moby/patternmatcher github.com/moby/patternmatcher/ignorefile -# github.com/moby/sys/mount v0.3.3 -## explicit; go 1.16 +# github.com/moby/sys/mount v0.3.5 +## explicit; go 1.18 github.com/moby/sys/mount -# github.com/moby/sys/mountinfo v0.7.1 -## explicit; go 1.16 +# github.com/moby/sys/mountinfo v0.7.2 +## explicit; go 1.17 github.com/moby/sys/mountinfo # github.com/moby/sys/sequential v0.5.0 ## explicit; go 1.17 @@ -836,13 +820,8 @@ github.com/spdx/tools-golang/spdx/v2/v2_3 ## explicit; go 1.20 github.com/stretchr/testify/assert github.com/stretchr/testify/require -<<<<<<< HEAD -# github.com/tonistiigi/fsutil v0.0.0-20230825212630-f09800878302 => github.com/alexcb/fsutil v0.0.0-20231030221755-644b08355b65 +# github.com/tonistiigi/fsutil v0.0.0-20240424095704-91a3fc46842c => github.com/alexcb/fsutil v0.0.0-20231030221755-644b08355b65 ## explicit; go 1.19 -======= -# github.com/tonistiigi/fsutil v0.0.0-20240424095704-91a3fc46842c -## explicit; go 1.20 ->>>>>>> v0.13.2 github.com/tonistiigi/fsutil github.com/tonistiigi/fsutil/copy github.com/tonistiigi/fsutil/types @@ -1003,14 +982,9 @@ golang.org/x/crypto/ssh/internal/bcrypt_pbkdf # golang.org/x/mod v0.13.0 ## explicit; go 1.18 golang.org/x/mod/semver -<<<<<<< HEAD -# golang.org/x/net v0.17.0 -## explicit; go 1.17 -golang.org/x/net/context -======= # golang.org/x/net v0.23.0 ## explicit; go 1.18 ->>>>>>> v0.13.2 +golang.org/x/net/context golang.org/x/net/http/httpguts golang.org/x/net/http2 golang.org/x/net/http2/hpack diff --git a/worker/containerd/containerd.go b/worker/containerd/containerd.go index ea6515646..8139cf0f5 100644 --- a/worker/containerd/containerd.go +++ b/worker/containerd/containerd.go @@ -31,10 +31,7 @@ import ( type RuntimeInfo = containerdexecutor.RuntimeInfo // NewWorkerOpt creates a WorkerOpt. -<<<<<<< HEAD // earthly-specific use semutil.Weighted instead of semaphore -func NewWorkerOpt(root string, address, snapshotterName, ns string, rootless bool, labels map[string]string, dns *oci.DNSConfig, nopt netproviders.Opt, apparmorProfile string, selinux bool, parallelismSem *semutil.Weighted, traceSocket string, runtime *RuntimeInfo, opts ...containerd.ClientOpt) (base.WorkerOpt, error) { -======= func NewWorkerOpt( root string, address, snapshotterName, ns string, @@ -44,12 +41,11 @@ func NewWorkerOpt( nopt netproviders.Opt, apparmorProfile string, selinux bool, - parallelismSem *semaphore.Weighted, + parallelismSem *semutil.Weighted, traceSocket string, runtime *RuntimeInfo, opts ...containerd.ClientOpt, ) (base.WorkerOpt, error) { ->>>>>>> v0.13.2 opts = append(opts, containerd.WithDefaultNamespace(ns)) if goRuntime.GOOS == "windows" { diff --git a/worker/tests/common.go b/worker/tests/common.go index 64c3b72a9..304d24bc8 100644 --- a/worker/tests/common.go +++ b/worker/tests/common.go @@ -38,17 +38,12 @@ func NewCtx(s string) context.Context { func TestWorkerExec(t *testing.T, w *base.Worker) { ctx := NewCtx("buildkit-test") -<<<<<<< HEAD - ctx, cancel := context.WithCancel(ctx) + ctx, cancel := context.WithCancelCause(ctx) sm, err := session.NewManager(&session.ManagerOpt{ HealthFrequency: 1 * time.Second, HealthTimeout: 10 * time.Second, HealthAllowedFailures: 1, }) -======= - ctx, cancel := context.WithCancelCause(ctx) - sm, err := session.NewManager() ->>>>>>> v0.13.2 require.NoError(t, err) snap := NewBusyboxSourceSnapshot(ctx, t, w, sm) From 36687719d0c9775aff1e92c3dc3970d94dfac69a Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Fri, 2 Oct 2026 11:46:42 +0100 Subject: [PATCH 2/7] fix: make vendor --- vendor/golang.org/x/net/context/context.go | 56 ---- vendor/golang.org/x/net/context/go17.go | 72 ----- vendor/golang.org/x/net/context/go19.go | 20 -- vendor/golang.org/x/net/context/pre_go17.go | 300 -------------------- vendor/golang.org/x/net/context/pre_go19.go | 109 ------- vendor/modules.txt | 1 - 6 files changed, 558 deletions(-) delete mode 100644 vendor/golang.org/x/net/context/context.go delete mode 100644 vendor/golang.org/x/net/context/go17.go delete mode 100644 vendor/golang.org/x/net/context/go19.go delete mode 100644 vendor/golang.org/x/net/context/pre_go17.go delete mode 100644 vendor/golang.org/x/net/context/pre_go19.go diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go deleted file mode 100644 index cf66309c4..000000000 --- a/vendor/golang.org/x/net/context/context.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package context defines the Context type, which carries deadlines, -// cancelation signals, and other request-scoped values across API boundaries -// and between processes. -// As of Go 1.7 this package is available in the standard library under the -// name context. https://golang.org/pkg/context. -// -// Incoming requests to a server should create a Context, and outgoing calls to -// servers should accept a Context. The chain of function calls between must -// propagate the Context, optionally replacing it with a modified copy created -// using WithDeadline, WithTimeout, WithCancel, or WithValue. -// -// Programs that use Contexts should follow these rules to keep interfaces -// consistent across packages and enable static analysis tools to check context -// propagation: -// -// Do not store Contexts inside a struct type; instead, pass a Context -// explicitly to each function that needs it. The Context should be the first -// parameter, typically named ctx: -// -// func DoSomething(ctx context.Context, arg Arg) error { -// // ... use ctx ... -// } -// -// Do not pass a nil Context, even if a function permits it. Pass context.TODO -// if you are unsure about which Context to use. -// -// Use context Values only for request-scoped data that transits processes and -// APIs, not for passing optional parameters to functions. -// -// The same Context may be passed to functions running in different goroutines; -// Contexts are safe for simultaneous use by multiple goroutines. -// -// See http://blog.golang.org/context for example code for a server that uses -// Contexts. -package context // import "golang.org/x/net/context" - -// Background returns a non-nil, empty Context. It is never canceled, has no -// values, and has no deadline. It is typically used by the main function, -// initialization, and tests, and as the top-level Context for incoming -// requests. -func Background() Context { - return background -} - -// TODO returns a non-nil, empty Context. Code should use context.TODO when -// it's unclear which Context to use or it is not yet available (because the -// surrounding function has not yet been extended to accept a Context -// parameter). TODO is recognized by static analysis tools that determine -// whether Contexts are propagated correctly in a program. -func TODO() Context { - return todo -} diff --git a/vendor/golang.org/x/net/context/go17.go b/vendor/golang.org/x/net/context/go17.go deleted file mode 100644 index 0c1b86793..000000000 --- a/vendor/golang.org/x/net/context/go17.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.7 - -package context - -import ( - "context" // standard library's context, as of Go 1.7 - "time" -) - -var ( - todo = context.TODO() - background = context.Background() -) - -// Canceled is the error returned by Context.Err when the context is canceled. -var Canceled = context.Canceled - -// DeadlineExceeded is the error returned by Context.Err when the context's -// deadline passes. -var DeadlineExceeded = context.DeadlineExceeded - -// WithCancel returns a copy of parent with a new Done channel. The returned -// context's Done channel is closed when the returned cancel function is called -// or when the parent context's Done channel is closed, whichever happens first. -// -// Canceling this context releases resources associated with it, so code should -// call cancel as soon as the operations running in this Context complete. -func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { - ctx, f := context.WithCancel(parent) - return ctx, f -} - -// WithDeadline returns a copy of the parent context with the deadline adjusted -// to be no later than d. If the parent's deadline is already earlier than d, -// WithDeadline(parent, d) is semantically equivalent to parent. The returned -// context's Done channel is closed when the deadline expires, when the returned -// cancel function is called, or when the parent context's Done channel is -// closed, whichever happens first. -// -// Canceling this context releases resources associated with it, so code should -// call cancel as soon as the operations running in this Context complete. -func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { - ctx, f := context.WithDeadline(parent, deadline) - return ctx, f -} - -// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)). -// -// Canceling this context releases resources associated with it, so code should -// call cancel as soon as the operations running in this Context complete: -// -// func slowOperationWithTimeout(ctx context.Context) (Result, error) { -// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) -// defer cancel() // releases resources if slowOperation completes before timeout elapses -// return slowOperation(ctx) -// } -func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { - return WithDeadline(parent, time.Now().Add(timeout)) -} - -// WithValue returns a copy of parent in which the value associated with key is -// val. -// -// Use context Values only for request-scoped data that transits processes and -// APIs, not for passing optional parameters to functions. -func WithValue(parent Context, key interface{}, val interface{}) Context { - return context.WithValue(parent, key, val) -} diff --git a/vendor/golang.org/x/net/context/go19.go b/vendor/golang.org/x/net/context/go19.go deleted file mode 100644 index e31e35a90..000000000 --- a/vendor/golang.org/x/net/context/go19.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.9 - -package context - -import "context" // standard library's context, as of Go 1.7 - -// A Context carries a deadline, a cancelation signal, and other values across -// API boundaries. -// -// Context's methods may be called by multiple goroutines simultaneously. -type Context = context.Context - -// A CancelFunc tells an operation to abandon its work. -// A CancelFunc does not wait for the work to stop. -// After the first call, subsequent calls to a CancelFunc do nothing. -type CancelFunc = context.CancelFunc diff --git a/vendor/golang.org/x/net/context/pre_go17.go b/vendor/golang.org/x/net/context/pre_go17.go deleted file mode 100644 index 065ff3dfa..000000000 --- a/vendor/golang.org/x/net/context/pre_go17.go +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.7 - -package context - -import ( - "errors" - "fmt" - "sync" - "time" -) - -// An emptyCtx is never canceled, has no values, and has no deadline. It is not -// struct{}, since vars of this type must have distinct addresses. -type emptyCtx int - -func (*emptyCtx) Deadline() (deadline time.Time, ok bool) { - return -} - -func (*emptyCtx) Done() <-chan struct{} { - return nil -} - -func (*emptyCtx) Err() error { - return nil -} - -func (*emptyCtx) Value(key interface{}) interface{} { - return nil -} - -func (e *emptyCtx) String() string { - switch e { - case background: - return "context.Background" - case todo: - return "context.TODO" - } - return "unknown empty Context" -} - -var ( - background = new(emptyCtx) - todo = new(emptyCtx) -) - -// Canceled is the error returned by Context.Err when the context is canceled. -var Canceled = errors.New("context canceled") - -// DeadlineExceeded is the error returned by Context.Err when the context's -// deadline passes. -var DeadlineExceeded = errors.New("context deadline exceeded") - -// WithCancel returns a copy of parent with a new Done channel. The returned -// context's Done channel is closed when the returned cancel function is called -// or when the parent context's Done channel is closed, whichever happens first. -// -// Canceling this context releases resources associated with it, so code should -// call cancel as soon as the operations running in this Context complete. -func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { - c := newCancelCtx(parent) - propagateCancel(parent, c) - return c, func() { c.cancel(true, Canceled) } -} - -// newCancelCtx returns an initialized cancelCtx. -func newCancelCtx(parent Context) *cancelCtx { - return &cancelCtx{ - Context: parent, - done: make(chan struct{}), - } -} - -// propagateCancel arranges for child to be canceled when parent is. -func propagateCancel(parent Context, child canceler) { - if parent.Done() == nil { - return // parent is never canceled - } - if p, ok := parentCancelCtx(parent); ok { - p.mu.Lock() - if p.err != nil { - // parent has already been canceled - child.cancel(false, p.err) - } else { - if p.children == nil { - p.children = make(map[canceler]bool) - } - p.children[child] = true - } - p.mu.Unlock() - } else { - go func() { - select { - case <-parent.Done(): - child.cancel(false, parent.Err()) - case <-child.Done(): - } - }() - } -} - -// parentCancelCtx follows a chain of parent references until it finds a -// *cancelCtx. This function understands how each of the concrete types in this -// package represents its parent. -func parentCancelCtx(parent Context) (*cancelCtx, bool) { - for { - switch c := parent.(type) { - case *cancelCtx: - return c, true - case *timerCtx: - return c.cancelCtx, true - case *valueCtx: - parent = c.Context - default: - return nil, false - } - } -} - -// removeChild removes a context from its parent. -func removeChild(parent Context, child canceler) { - p, ok := parentCancelCtx(parent) - if !ok { - return - } - p.mu.Lock() - if p.children != nil { - delete(p.children, child) - } - p.mu.Unlock() -} - -// A canceler is a context type that can be canceled directly. The -// implementations are *cancelCtx and *timerCtx. -type canceler interface { - cancel(removeFromParent bool, err error) - Done() <-chan struct{} -} - -// A cancelCtx can be canceled. When canceled, it also cancels any children -// that implement canceler. -type cancelCtx struct { - Context - - done chan struct{} // closed by the first cancel call. - - mu sync.Mutex - children map[canceler]bool // set to nil by the first cancel call - err error // set to non-nil by the first cancel call -} - -func (c *cancelCtx) Done() <-chan struct{} { - return c.done -} - -func (c *cancelCtx) Err() error { - c.mu.Lock() - defer c.mu.Unlock() - return c.err -} - -func (c *cancelCtx) String() string { - return fmt.Sprintf("%v.WithCancel", c.Context) -} - -// cancel closes c.done, cancels each of c's children, and, if -// removeFromParent is true, removes c from its parent's children. -func (c *cancelCtx) cancel(removeFromParent bool, err error) { - if err == nil { - panic("context: internal error: missing cancel error") - } - c.mu.Lock() - if c.err != nil { - c.mu.Unlock() - return // already canceled - } - c.err = err - close(c.done) - for child := range c.children { - // NOTE: acquiring the child's lock while holding parent's lock. - child.cancel(false, err) - } - c.children = nil - c.mu.Unlock() - - if removeFromParent { - removeChild(c.Context, c) - } -} - -// WithDeadline returns a copy of the parent context with the deadline adjusted -// to be no later than d. If the parent's deadline is already earlier than d, -// WithDeadline(parent, d) is semantically equivalent to parent. The returned -// context's Done channel is closed when the deadline expires, when the returned -// cancel function is called, or when the parent context's Done channel is -// closed, whichever happens first. -// -// Canceling this context releases resources associated with it, so code should -// call cancel as soon as the operations running in this Context complete. -func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { - if cur, ok := parent.Deadline(); ok && cur.Before(deadline) { - // The current deadline is already sooner than the new one. - return WithCancel(parent) - } - c := &timerCtx{ - cancelCtx: newCancelCtx(parent), - deadline: deadline, - } - propagateCancel(parent, c) - d := deadline.Sub(time.Now()) - if d <= 0 { - c.cancel(true, DeadlineExceeded) // deadline has already passed - return c, func() { c.cancel(true, Canceled) } - } - c.mu.Lock() - defer c.mu.Unlock() - if c.err == nil { - c.timer = time.AfterFunc(d, func() { - c.cancel(true, DeadlineExceeded) - }) - } - return c, func() { c.cancel(true, Canceled) } -} - -// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to -// implement Done and Err. It implements cancel by stopping its timer then -// delegating to cancelCtx.cancel. -type timerCtx struct { - *cancelCtx - timer *time.Timer // Under cancelCtx.mu. - - deadline time.Time -} - -func (c *timerCtx) Deadline() (deadline time.Time, ok bool) { - return c.deadline, true -} - -func (c *timerCtx) String() string { - return fmt.Sprintf("%v.WithDeadline(%s [%s])", c.cancelCtx.Context, c.deadline, c.deadline.Sub(time.Now())) -} - -func (c *timerCtx) cancel(removeFromParent bool, err error) { - c.cancelCtx.cancel(false, err) - if removeFromParent { - // Remove this timerCtx from its parent cancelCtx's children. - removeChild(c.cancelCtx.Context, c) - } - c.mu.Lock() - if c.timer != nil { - c.timer.Stop() - c.timer = nil - } - c.mu.Unlock() -} - -// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)). -// -// Canceling this context releases resources associated with it, so code should -// call cancel as soon as the operations running in this Context complete: -// -// func slowOperationWithTimeout(ctx context.Context) (Result, error) { -// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) -// defer cancel() // releases resources if slowOperation completes before timeout elapses -// return slowOperation(ctx) -// } -func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { - return WithDeadline(parent, time.Now().Add(timeout)) -} - -// WithValue returns a copy of parent in which the value associated with key is -// val. -// -// Use context Values only for request-scoped data that transits processes and -// APIs, not for passing optional parameters to functions. -func WithValue(parent Context, key interface{}, val interface{}) Context { - return &valueCtx{parent, key, val} -} - -// A valueCtx carries a key-value pair. It implements Value for that key and -// delegates all other calls to the embedded Context. -type valueCtx struct { - Context - key, val interface{} -} - -func (c *valueCtx) String() string { - return fmt.Sprintf("%v.WithValue(%#v, %#v)", c.Context, c.key, c.val) -} - -func (c *valueCtx) Value(key interface{}) interface{} { - if c.key == key { - return c.val - } - return c.Context.Value(key) -} diff --git a/vendor/golang.org/x/net/context/pre_go19.go b/vendor/golang.org/x/net/context/pre_go19.go deleted file mode 100644 index ec5a63803..000000000 --- a/vendor/golang.org/x/net/context/pre_go19.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.9 - -package context - -import "time" - -// A Context carries a deadline, a cancelation signal, and other values across -// API boundaries. -// -// Context's methods may be called by multiple goroutines simultaneously. -type Context interface { - // Deadline returns the time when work done on behalf of this context - // should be canceled. Deadline returns ok==false when no deadline is - // set. Successive calls to Deadline return the same results. - Deadline() (deadline time.Time, ok bool) - - // Done returns a channel that's closed when work done on behalf of this - // context should be canceled. Done may return nil if this context can - // never be canceled. Successive calls to Done return the same value. - // - // WithCancel arranges for Done to be closed when cancel is called; - // WithDeadline arranges for Done to be closed when the deadline - // expires; WithTimeout arranges for Done to be closed when the timeout - // elapses. - // - // Done is provided for use in select statements: - // - // // Stream generates values with DoSomething and sends them to out - // // until DoSomething returns an error or ctx.Done is closed. - // func Stream(ctx context.Context, out chan<- Value) error { - // for { - // v, err := DoSomething(ctx) - // if err != nil { - // return err - // } - // select { - // case <-ctx.Done(): - // return ctx.Err() - // case out <- v: - // } - // } - // } - // - // See http://blog.golang.org/pipelines for more examples of how to use - // a Done channel for cancelation. - Done() <-chan struct{} - - // Err returns a non-nil error value after Done is closed. Err returns - // Canceled if the context was canceled or DeadlineExceeded if the - // context's deadline passed. No other values for Err are defined. - // After Done is closed, successive calls to Err return the same value. - Err() error - - // Value returns the value associated with this context for key, or nil - // if no value is associated with key. Successive calls to Value with - // the same key returns the same result. - // - // Use context values only for request-scoped data that transits - // processes and API boundaries, not for passing optional parameters to - // functions. - // - // A key identifies a specific value in a Context. Functions that wish - // to store values in Context typically allocate a key in a global - // variable then use that key as the argument to context.WithValue and - // Context.Value. A key can be any type that supports equality; - // packages should define keys as an unexported type to avoid - // collisions. - // - // Packages that define a Context key should provide type-safe accessors - // for the values stores using that key: - // - // // Package user defines a User type that's stored in Contexts. - // package user - // - // import "golang.org/x/net/context" - // - // // User is the type of value stored in the Contexts. - // type User struct {...} - // - // // key is an unexported type for keys defined in this package. - // // This prevents collisions with keys defined in other packages. - // type key int - // - // // userKey is the key for user.User values in Contexts. It is - // // unexported; clients use user.NewContext and user.FromContext - // // instead of using this key directly. - // var userKey key = 0 - // - // // NewContext returns a new Context that carries value u. - // func NewContext(ctx context.Context, u *User) context.Context { - // return context.WithValue(ctx, userKey, u) - // } - // - // // FromContext returns the User value stored in ctx, if any. - // func FromContext(ctx context.Context) (*User, bool) { - // u, ok := ctx.Value(userKey).(*User) - // return u, ok - // } - Value(key interface{}) interface{} -} - -// A CancelFunc tells an operation to abandon its work. -// A CancelFunc does not wait for the work to stop. -// After the first call, subsequent calls to a CancelFunc do nothing. -type CancelFunc func() diff --git a/vendor/modules.txt b/vendor/modules.txt index 6eb24506e..96ec72a8c 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -984,7 +984,6 @@ golang.org/x/crypto/ssh/internal/bcrypt_pbkdf golang.org/x/mod/semver # golang.org/x/net v0.23.0 ## explicit; go 1.18 -golang.org/x/net/context golang.org/x/net/http/httpguts golang.org/x/net/http2 golang.org/x/net/http2/hpack From 065c631e4bbc0ad019579db665ad6a5ed72b7976 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Fri, 2 Oct 2026 11:58:29 +0100 Subject: [PATCH 3/7] fix: make archutil --- util/archutil/arm_binary.go | 2 +- util/archutil/loong64_binary.go | 2 +- util/archutil/mips64_binary.go | 2 +- util/archutil/mips64le_binary.go | 2 +- util/archutil/riscv64_binary.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/util/archutil/arm_binary.go b/util/archutil/arm_binary.go index 19a9298c0..5cf49b1d5 100644 --- a/util/archutil/arm_binary.go +++ b/util/archutil/arm_binary.go @@ -6,4 +6,4 @@ package archutil // This file is generated by running "make archutil". // Do not edit manually. -const Binaryarm = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x8c\x8f\xbd\x8d\xc2\x40\x10\x85\xbf\x39\xff\xdc\x49\x77\xc1\xdd\x55\x00\x19\xd1\x46\x6e\xc0\x01\x44\x10\x40\x07\x6b\x61\x09\x67\x96\x3d\x48\x64\x50\x03\x15\xb8\x08\x3a\xb2\x88\x69\x01\xad\x7f\xc4\x06\x0e\x78\xd2\x68\x34\xdf\x7b\xc1\xbc\xf3\x72\xbd\x12\x11\x46\x7d\xb0\xc0\x5d\x8a\x90\x00\xb7\x1e\x46\x09\xb3\xce\x0b\x09\x78\xa5\xa5\x9b\x0b\x74\x13\x39\xf4\x0b\xdb\xbb\xee\x99\x50\xdc\xdb\x40\xd3\x4a\xd9\xb4\xc0\x23\xfd\x03\x6c\x6e\xb3\x02\xf9\x04\xbe\x04\x53\x1f\x6a\xad\xd4\x66\x18\xcd\x4f\x8a\x49\x77\x1b\x63\x55\xab\x22\x3b\x6a\x5e\xf3\xb6\xbe\x87\x0f\xe3\xa1\x8f\x02\x3f\x9e\x1f\x0e\xdb\xbd\x10\x40\x39\x72\xd7\xe5\xdf\xcb\x89\xb7\x03\x8f\x5f\x81\xf9\x44\xee\x19\x00\x00\xff\xff\xb6\x04\x27\x29\x54\x01\x00\x00" +const Binaryarm = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x8c\x8f\x3d\x6e\xc2\x40\x10\x85\xbf\x89\x7f\x12\x29\x29\x92\x9c\x20\xe9\xa8\xb6\xf2\x05\x5c\x40\x05\x05\xdc\x60\x2d\x2c\xe1\xce\xb2\x07\x89\x0e\xce\xc0\x09\x7c\x08\x6e\x64\x51\x73\x05\xe4\x65\x2d\xb6\x70\xc1\x93\x46\xb3\xfb\xcd\x2b\xde\x3b\xce\x97\x0b\x11\x61\xd4\x1b\x33\x86\x9f\x22\x64\xc0\xe5\x01\x93\x8c\x3f\x77\x8b\x89\x78\xba\xc5\xcd\x09\xdc\x24\x9e\xad\xaf\xba\x65\x42\x29\xf0\xed\x5e\x5d\x2f\x75\xd7\x03\xb7\xfc\x07\xb0\xa5\x2d\x2a\xe4\x1d\xf8\x10\x4c\xbb\x6b\xb5\x51\x5b\x60\xb4\x3c\x28\x26\xdf\xac\x8c\x55\x6d\xaa\x62\xaf\x65\xcb\xcb\xfa\xf4\x09\x53\xdf\x47\x81\xaf\xe0\x1e\xfb\x3d\x44\x88\xa0\x1e\xf9\xd0\xe5\x37\xf0\x49\xb0\xa3\x80\x9f\x81\xff\x09\xdf\x3d\x00\x00\xff\xff\x0b\x8f\xbf\xbd\x54\x01\x00\x00" diff --git a/util/archutil/loong64_binary.go b/util/archutil/loong64_binary.go index 01d445431..664c5105e 100644 --- a/util/archutil/loong64_binary.go +++ b/util/archutil/loong64_binary.go @@ -6,4 +6,4 @@ package archutil // This file is generated by running "make archutil". // Do not edit manually. -const Binaryloong64 = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xaa\x77\xf5\x71\x63\x62\x64\x64\x80\x01\x26\x06\x08\x6f\x03\x03\x83\x02\x88\x76\x80\x8a\x5f\x80\xd2\xce\x60\x31\x0b\x06\x26\x06\x07\x06\x66\x06\x26\x06\x90\x1a\x56\x06\x14\xa0\xc0\x88\x44\xef\x81\x0a\xc2\x68\x98\x81\x81\x4f\x4b\x52\xd8\x18\x88\x07\x02\x50\x9a\x85\x41\x94\x81\xbb\xa4\x91\x99\x81\x41\x9b\x81\x41\xaf\x38\xa3\xb8\xa4\xa8\x24\x31\x89\x41\xaf\x24\xb5\xa2\x84\x81\x0a\x80\x9b\x81\x01\xec\x27\x98\xdb\x60\xe1\xb0\x01\xca\xe7\x41\x53\xcf\x88\x85\xcf\x8c\xc5\x5c\x98\xff\x05\x09\xe8\x07\x04\x00\x00\xff\xff\x5f\xc5\x9b\x9d\x90\x01\x00\x00" +const Binaryloong64 = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xaa\x77\xf5\x71\x63\x62\x64\x64\x80\x01\x26\x06\x08\x6f\x03\x03\x83\x02\x88\x76\x80\x8a\x5f\x80\xd2\xce\x60\x31\x0b\x06\x26\x06\x07\x06\x66\x06\x26\x06\x90\x1a\x56\x06\x14\xa0\xc0\x88\x44\xef\x81\x0a\xee\x81\x4b\x43\x64\x03\x9f\x96\xa4\xb0\x31\x10\x0f\x04\xa0\x34\x0b\x83\x28\x03\x77\x49\x23\x33\x03\x83\x36\x03\x83\x5e\x71\x46\x71\x49\x51\x49\x62\x12\x83\x5e\x49\x6a\x45\x09\x03\x15\x00\x37\xd4\x85\x30\xb7\xc1\xc2\x61\x03\x94\xcf\x83\xa6\x9e\x11\x0b\x9f\x19\x8b\xb9\x30\xff\x0b\x12\xd0\x0f\x08\x00\x00\xff\xff\x72\x81\xda\x64\x90\x01\x00\x00" diff --git a/util/archutil/mips64_binary.go b/util/archutil/mips64_binary.go index 28e3aba35..86b513974 100644 --- a/util/archutil/mips64_binary.go +++ b/util/archutil/mips64_binary.go @@ -6,4 +6,4 @@ package archutil // This file is generated by running "make archutil". // Do not edit manually. -const Binarymips64 = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xac\x92\xb1\x4a\xf4\x40\x14\x85\xbf\x99\xcd\xe6\xff\x41\xc5\x05\x2d\xc4\x2a\xc5\x16\x8b\xc5\x60\x69\x25\xb1\x50\x10\x14\x56\x7c\x82\x04\xd7\x18\x90\x24\x6c\x26\x60\x27\xbe\x81\xcf\xe4\xbb\x08\xbe\x80\xf5\xca\x24\x93\x98\x44\xa6\x10\x3c\x45\xce\xdc\x93\x7b\x72\xc3\x9c\xfb\x7c\x7e\x75\x21\xa5\xa0\x83\xe4\x3f\x60\x04\x11\x20\x8e\xad\x1a\x36\x24\x5e\x83\xa6\x3a\x61\x42\x88\xcf\xb4\x80\x09\xe0\xd9\xbe\x8f\xc6\x37\x60\x83\x83\x11\xb7\x33\xa6\xdf\x83\xeb\xfe\x3e\x9b\x63\x38\x60\x01\x77\xfa\xfd\x06\xf0\xf9\x1d\x66\xe6\x37\xa5\x44\xf4\xe7\xd5\x8f\x45\x57\xef\x3b\xbc\x22\x10\x2f\xed\x3d\x30\xf7\x60\x2e\xf7\xde\x80\x6d\x53\x9f\x01\xbb\x49\x56\xd5\x5f\xfb\xe7\x09\x54\xf9\x50\xea\xb5\x8e\x62\xd4\xf5\xe5\xf2\x56\x45\x71\x7a\xff\x18\x25\xa5\x2d\xf3\x42\xa7\x79\x56\xa2\xf4\xea\x49\xa3\x92\xac\x52\x91\xd6\xeb\x34\xae\xf4\xaa\xe4\x4f\xb0\x55\xc0\x51\x97\xe6\x30\x87\x71\x1e\xf4\xf2\x68\xf5\xc3\x02\x76\xac\x68\xfd\xa2\x7f\x65\x06\x0b\x87\x5f\xd8\x77\x6d\xa3\x3f\xdc\xa3\x6e\x9f\x66\x3f\xf3\xe9\xa0\xf2\xcd\xe6\xd3\x11\x45\xe8\xf0\x8f\x73\x9d\x38\xfc\x4b\x7b\x38\x75\xf9\xbf\x02\x00\x00\xff\xff\x61\x89\x8d\x22\x10\x03\x00\x00" +const Binarymips64 = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xac\x92\x4f\x4a\xc4\x30\x18\xc5\x7f\xc9\xfc\x51\x50\x71\x40\x17\xe2\xaa\x8b\x59\x0c\x2e\x82\x4b\x57\x52\x17\x0a\x82\xc2\x88\x27\x68\x71\xac\x05\x69\xcb\x34\x05\x77\xe2\x0d\x3c\x93\x77\x11\xbc\x80\xeb\x91\xb4\x69\x68\x2b\x59\x08\x3e\x68\x5f\xde\xd7\xef\xe5\x2b\x79\x79\xbd\xbc\xb9\x92\x52\x30\xc1\x42\xb2\x0d\x08\xf3\x04\x88\x53\x5b\x0d\x1b\x12\xef\x41\xa3\xce\x18\x11\x32\x65\x52\xc0\x08\x18\xdb\xbe\xaf\xc6\xd7\x63\x83\xa3\x01\xb7\x33\xdc\x58\xdb\xdf\x65\xb3\x0c\x7b\x2c\xe0\x41\x7f\xde\x01\x53\xfe\x86\x99\xf9\x4d\x29\xeb\x99\x6e\xf3\xfa\xb5\x70\xfa\xd0\xe3\x15\x81\x78\x6b\xcf\x81\xf9\x18\xe6\xf2\xe0\x03\xd8\x35\xfa\x02\xd8\x4f\xb2\xaa\xde\x6d\x6b\x2c\x50\xe5\x53\xa9\xd7\x3a\x8a\x51\xb7\xd7\xcb\x7b\x15\xc5\xe9\xe3\x73\x94\x94\x56\xe6\x85\x4e\xf3\xac\x44\xe9\xd5\x8b\x46\x25\x59\xa5\x22\xad\xd7\x69\x5c\xe9\x55\xc9\xbf\x60\xa7\x80\x13\x97\x66\x3f\x87\x61\x1e\x74\xf2\x68\xeb\xc7\x05\xec\xd9\xa2\xf5\x8b\xee\x91\x19\x2c\x3c\x7e\x61\xbf\xb5\x8d\xd3\xfe\x3d\x72\xf7\x69\xf6\x3b\x1f\x07\x95\x6f\x36\xdf\x9e\x28\x42\x8f\x7f\x98\xeb\xc8\xe3\x5f\xda\xc5\xb9\xcf\xff\x13\x00\x00\xff\xff\xed\xdf\xac\xa8\x10\x03\x00\x00" diff --git a/util/archutil/mips64le_binary.go b/util/archutil/mips64le_binary.go index 5d939d76a..a6e090583 100644 --- a/util/archutil/mips64le_binary.go +++ b/util/archutil/mips64le_binary.go @@ -6,4 +6,4 @@ package archutil // This file is generated by running "make archutil". // Do not edit manually. -const Binarymips64le = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xa4\x92\xb1\x4a\xf4\x40\x14\x85\xbf\x99\xec\xee\xbf\xf0\x2b\x0a\x5a\x88\x55\x8a\x2d\x82\xc5\x90\xd2\x4a\xc6\x42\x41\x50\x58\xf1\x09\x12\x5c\x63\x40\x92\xb0\x99\x80\x9d\xf8\x06\x3e\x93\xef\x22\xec\x0b\x58\xaf\x84\xcc\xac\x26\x26\x28\x78\x9b\x73\xcf\xbd\x73\x12\xe6\x9c\x79\x3a\xbb\x3c\x97\x42\xe0\x4a\x32\xa5\x66\xa1\xc0\xaf\x51\xdb\xf9\xcb\xe7\x11\x5f\x73\x8c\x87\x66\xc2\x18\x0f\x8a\x11\xb0\xb2\xcb\x15\x8d\xce\xe1\x81\x9d\x3b\x9c\x5a\xac\x77\x63\x5a\xe5\x8b\x2f\xa8\x2d\xd1\x9b\xff\x36\xcd\xf5\x9b\xb9\x9d\xf0\xfb\xda\xdd\x74\x1e\x52\xd2\xf9\x1a\x88\xa0\xc1\xfd\x01\x7d\xf8\x2c\x7c\xd1\x9a\x8c\x66\xaf\x7b\x72\xb6\x65\xd9\xe9\x0e\x90\x64\x15\xe2\x5f\xbd\x13\xa8\xf2\xbe\x34\x4b\x13\xc5\xa8\xab\x8b\xf9\x8d\x8a\xe2\xf4\xee\x21\x4a\x4a\x4b\xf3\xc2\xa4\x79\x56\xa2\xcc\xe2\xd1\xa0\x92\xac\x52\x91\x31\xcb\x34\xae\xcc\xa2\xe4\xef\xf5\x1f\x38\x82\x42\x7e\xcf\xa3\x95\x03\x9d\x3c\xdc\xfc\x10\xd8\x6e\xf4\x53\x6b\x54\x73\x7f\x6b\x42\x30\xa0\x77\x1e\x05\xb6\x77\x19\xb9\x77\x14\x8a\x6e\x1e\xfd\x5c\x01\xef\xeb\x75\xde\xbd\x97\x1e\xd0\x8b\x1e\xee\xf5\xf8\x32\xb7\x07\x4f\x7e\xd0\x7f\x04\x00\x00\xff\xff\xd1\x67\xf7\xcd\x10\x03\x00\x00" +const Binarymips64le = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xa4\x92\xc1\x4a\xc3\x40\x10\x86\xbf\xd9\xb4\xb5\xa0\xa2\xa0\x07\xf1\x94\x43\x0f\xc5\xc3\xd2\xa3\x27\x59\x0f\x0a\x82\x42\xc5\x27\x48\xb1\xd6\x82\x34\xa1\xd9\x80\x37\xf1\x0d\x7c\x26\xdf\x45\xe8\x0b\x78\xae\x84\xdd\x2d\x26\x26\x28\xf8\x5f\xfe\xf9\x67\xf2\x27\xcc\xfc\x79\xb9\xb8\xbe\x54\x22\x74\x71\x50\xf4\x11\x60\x24\xc4\x25\x1b\xdf\x7f\x13\x02\x62\xc3\x29\x11\x86\x1e\x5d\x22\xc8\x3a\xc0\xca\x0f\x57\x38\x5f\xe0\x23\xdf\x0f\xdc\xf7\x5c\xce\xba\x54\x10\xcb\x37\x36\x5e\x98\xcd\x77\x5d\x71\xfb\x61\xef\x7b\xfc\x1d\xfb\x9b\x2a\x42\x29\x6a\x6f\x03\x19\x3a\x3e\x6c\xf1\x8f\x5e\x25\x96\x4a\xa7\x33\x78\x3f\x50\x83\x1d\xaf\xce\xf7\x80\xd9\xa2\x40\xb6\xca\x99\xa0\xf3\xc7\xdc\x2e\x6d\x32\x41\xdf\x5c\x8d\xef\x74\x32\x99\x3f\x3c\x25\xb3\xdc\xcb\x34\xb3\xf3\x74\x91\xa3\xed\xf4\xd9\xa2\x67\x8b\x42\x27\xd6\x2e\xe7\x93\xc2\x4e\x73\xfe\x8f\x6d\xe0\x04\x32\xf5\x33\x8f\x4a\x0e\xd4\xf2\x08\xfd\x63\x60\xd7\xf9\xfb\xfe\x50\x6e\x7f\x7f\x84\x61\x8b\x3f\xdc\x68\xe8\xeb\x90\x51\xf8\x8f\x46\x52\xcf\xa3\x59\x6b\xe0\x73\xbd\x4e\xeb\x7b\x99\x16\xbf\x34\xe8\xa8\xe1\x2e\x63\xff\xe0\xd9\x2f\xfe\xaf\x00\x00\x00\xff\xff\x5d\x31\xd6\x47\x10\x03\x00\x00" diff --git a/util/archutil/riscv64_binary.go b/util/archutil/riscv64_binary.go index 2db29cf0b..72c9f5023 100644 --- a/util/archutil/riscv64_binary.go +++ b/util/archutil/riscv64_binary.go @@ -6,4 +6,4 @@ package archutil // This file is generated by running "make archutil". // Do not edit manually. -const Binaryriscv64 = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xaa\x77\xf5\x71\x63\x62\x64\x64\x80\x01\x26\x86\xcf\x0c\x20\xde\x0b\x06\x88\x98\x03\x54\x3c\x00\xaa\x84\x05\x2c\x66\xc1\xc0\xcc\xe0\xc0\xc0\xc2\xc0\xcc\xc0\xcc\xc0\x50\x00\x12\xfb\xc2\x80\x1d\x98\xa3\xf1\x19\x91\x68\x56\x9c\x32\x08\xf3\xe0\xe6\x0a\x40\xa8\xc0\xa7\x25\x29\x6c\x0c\xc4\x03\xa8\x36\x06\x61\x56\x06\x86\xc9\x1c\x17\x58\x8b\x19\x18\x18\x1c\xcd\x18\x18\x18\x8a\x32\x8b\x93\xcb\x18\x18\x75\x40\xee\x28\x2a\x33\x33\xc9\x34\x2a\x30\x88\xcf\x05\x11\x89\x20\x22\x0d\x44\xa4\x80\x88\xaa\xdc\xdc\xd2\x1c\xc3\x02\x03\x06\x06\xbd\xe2\x8c\xe2\x92\xa2\x92\xc4\x24\x06\xbd\x92\xd4\x8a\x12\x06\x3d\xb0\x19\x7a\x89\x25\x25\x45\x99\x49\xa5\x25\xa9\xc5\x0c\x94\x03\x6e\x68\x08\xc0\xfc\x08\x8b\x87\x17\x50\x3e\x0f\x9a\x7a\x16\x34\xbe\x20\x03\x03\x38\x4e\xd0\xcd\xfd\x42\x20\x3e\x90\xf9\xcc\x58\xdc\xa5\x0d\x55\xa8\x4c\x40\x3f\x20\x00\x00\xff\xff\xfa\x60\xf3\x5e\x50\x02\x00\x00" +const Binaryriscv64 = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xaa\x77\xf5\x71\x63\x62\x64\x64\x80\x01\x26\x86\xcf\x0c\x20\xde\x0b\x06\x88\x98\x03\x54\x3c\x03\xaa\x84\x05\x2c\x66\xc1\xc0\xcc\xe0\xc0\xc0\xc2\xc0\xcc\xc0\xcc\xc0\x50\x00\x12\xfb\xc2\x80\x1d\x78\xa1\xf1\x19\x91\x68\x56\x9c\x32\x08\xf3\xe0\xe6\x0a\x40\xa8\xc0\xa7\x25\x29\x6c\x0c\xc4\x03\xa8\x36\x06\x61\x56\x06\x86\xc9\x1c\x17\x58\x8b\x19\x18\x18\x1c\x3d\x19\x18\x18\x8a\x32\x8b\x93\xcb\x18\x18\xed\x41\xee\x28\x2a\x33\x33\xc9\x34\x2a\x30\x88\xcf\x05\x11\x89\x20\x22\x0d\x44\xa4\x80\x88\xaa\xdc\xdc\xd2\x1c\x43\x10\x23\x31\x31\x37\x1f\xc2\xc8\x29\x2a\x4e\x36\x2c\x30\x60\x60\xd0\x2b\xce\x28\x2e\x29\x2a\x49\x4c\x62\xd0\x2b\x49\xad\x28\x61\xd0\x03\x1b\xab\x97\x58\x52\x52\x94\x99\x54\x5a\x92\x5a\xcc\x40\x25\xc0\x0d\x0d\x19\x98\xdf\x61\xf1\xf3\x02\xca\xe7\x41\x53\xcf\x82\xc6\x17\x64\x60\x00\xc7\x15\xba\xb9\x5f\x08\xc4\x13\x32\x9f\x19\x8b\xbb\xec\xa0\x0a\x95\x09\xe8\x07\x04\x00\x00\xff\xff\xa7\x65\x3e\x6a\x68\x02\x00\x00" From d2b491768fbe0e937105e1489f35fbf3eae441ff Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Fri, 2 Oct 2026 12:05:39 +0100 Subject: [PATCH 4/7] chore: align github action versions with upstream --- .github/workflows/.test.yml | 4 ++-- .github/workflows/dockerd.yml | 2 +- .github/workflows/test-os.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/.test.yml b/.github/workflows/.test.yml index d0dc85ebc..94c03c82f 100644 --- a/.github/workflows/.test.yml +++ b/.github/workflows/.test.yml @@ -63,7 +63,7 @@ jobs: - name: Set outputs id: set - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 => v7 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: script: | const yaml = require('js-yaml'); @@ -181,7 +181,7 @@ jobs: - name: Send to Codecov if: always() - uses: codecov/codecov-action@ab904c41d6ece82784817410c45d8b8c02684457 # v3.1.6 => v4 + uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0 with: directory: ./bin/testreports flags: ${{ matrix.codecov_flags }} diff --git a/.github/workflows/dockerd.yml b/.github/workflows/dockerd.yml index 567220a96..2fe871abe 100644 --- a/.github/workflows/dockerd.yml +++ b/.github/workflows/dockerd.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Prepare - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 => v7 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: script: | const version = `${{ inputs.version }}` || '25.0.2'; diff --git a/.github/workflows/test-os.yml b/.github/workflows/test-os.yml index 76fe67169..f212485b4 100644 --- a/.github/workflows/test-os.yml +++ b/.github/workflows/test-os.yml @@ -186,7 +186,7 @@ jobs: path: ${{ env.DESTDIR }} - name: Cache Vagrant boxes - uses: actions/cache@6f8efc29b200d32929f49075959781ed54ec270c # v3.5.0 => v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: ~/.vagrant.d/boxes key: ${{ runner.os }}-vagrant-${{ hashFiles('hack/Vagrantfile.freebsd13') }} From 5c127fb46b4fd11bf24655c22fe0fa2cf7084234 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Fri, 2 Oct 2026 13:16:12 +0100 Subject: [PATCH 5/7] fix: inline cache --- exporter/earthlyoutputs/export.go | 67 ++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/exporter/earthlyoutputs/export.go b/exporter/earthlyoutputs/export.go index f3a515197..ef44cc530 100644 --- a/exporter/earthlyoutputs/export.go +++ b/exporter/earthlyoutputs/export.go @@ -9,6 +9,7 @@ import ( "os" "strconv" "strings" + "sync" "time" archiveexporter "github.com/containerd/containerd/images/archive" @@ -28,6 +29,7 @@ import ( "github.com/moby/buildkit/session/filesync" "github.com/moby/buildkit/session/pullping" "github.com/moby/buildkit/snapshot" + "github.com/moby/buildkit/solver/result" "github.com/moby/buildkit/util/compression" "github.com/moby/buildkit/util/contentutil" "github.com/moby/buildkit/util/grpcerrors" @@ -238,6 +240,8 @@ type imgData struct { localExportReport func() opts containerimage.ImageCommitOpts + + inlineCacheRefKeys map[string]string // maps platform ID (or "" for single-platform) -> src.Refs key } func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source, inlineCache exptypes.InlineCache, sessionID string) (map[string]string, exporter.DescriptorReference, error) { @@ -327,7 +331,8 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source img, ok := images[imgName] if !ok { img = &imgData{ - expSrc: &exporter.Source{}, + expSrc: &exporter.Source{}, + inlineCacheRefKeys: make(map[string]string), } images[imgName] = img } @@ -362,6 +367,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source Platform: p, } img.platforms = append(img.platforms, plat) + img.inlineCacheRefKeys[platStr] = k } else { ps, err := exptypes.ParsePlatforms(img.expSrc.Metadata) if err != nil { @@ -374,6 +380,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source return nil, nil, err } img.expSrc.AddMeta(exptypes.ExporterPlatformsKey, dt) + img.inlineCacheRefKeys[""] = k } for mdK, mdV := range simpleMd { @@ -403,9 +410,60 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source } defer done(context.TODO()) + var ( + inlineCacheOnce sync.Once + inlineCacheResult *result.Result[*exptypes.InlineCacheEntry] + inlineCacheErr error + ) + getInlineCache := func(ctx context.Context) (*result.Result[*exptypes.InlineCacheEntry], error) { + if inlineCache == nil { + return nil, nil + } + inlineCacheOnce.Do(func() { + inlineCacheResult, inlineCacheErr = inlineCache(ctx) + }) + return inlineCacheResult, inlineCacheErr + } + resp := make(map[string]string) for imgName, img := range images { - desc, err := e.opt.ImageWriter.Commit(ctx, img.expSrc, sessionID, inlineCache, &img.opts) + var imgInlineCache exptypes.InlineCache + if inlineCache != nil { + imgInlineCache = func(ctx context.Context) (*result.Result[*exptypes.InlineCacheEntry], error) { + res, err := getInlineCache(ctx) + if err != nil || res == nil { + return nil, err + } + imgRes := &result.Result[*exptypes.InlineCacheEntry]{} + if srcRefKey, ok := img.inlineCacheRefKeys[""]; ok { + if entry, found := res.FindRef(srcRefKey); found { + imgRes.Ref = entry + for _, plat := range img.platforms { + imgRes.AddRef(plat.ID, entry) + } + } + } + for platStr, srcRefKey := range img.inlineCacheRefKeys { + if platStr == "" { + continue + } + if entry, found := res.FindRef(srcRefKey); found { + imgRes.AddRef(platStr, entry) + if imgRes.Ref == nil { + imgRes.Ref = entry + } + } + } + if imgRes.Ref == nil && len(imgRes.Refs) == 0 && res.Ref != nil { + imgRes.Ref = res.Ref + for _, plat := range img.platforms { + imgRes.AddRef(plat.ID, res.Ref) + } + } + return imgRes, nil + } + } + desc, err := e.opt.ImageWriter.Commit(ctx, img.expSrc, sessionID, imgInlineCache, &img.opts) if err != nil { return nil, nil, err } @@ -431,9 +489,8 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source resp[descKey] = base64.StdEncoding.EncodeToString(dtDesc) } - timeoutCtx, cancel := context.WithCancelCause(ctx) - timeoutCtx, _ = context.WithTimeoutCause(timeoutCtx, 5*time.Second, errors.WithStack(context.DeadlineExceeded)) - defer cancel(errors.WithStack(context.Canceled)) + timeoutCtx, cancel := context.WithTimeoutCause(ctx, 5*time.Second, errors.WithStack(context.DeadlineExceeded)) + defer cancel() caller, err := e.opt.SessionManager.Get(timeoutCtx, sessionID, false) if err != nil { return nil, nil, err From 574139e8e56078d5544358b52dc7551287f68e87 Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Fri, 2 Oct 2026 13:34:36 +0100 Subject: [PATCH 6/7] fix: action actions/github-script@v7 is not allowed --- .github/workflows/.test.yml | 2 +- .github/workflows/test-os.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/.test.yml b/.github/workflows/.test.yml index 94c03c82f..51c9bc654 100644 --- a/.github/workflows/.test.yml +++ b/.github/workflows/.test.yml @@ -189,7 +189,7 @@ jobs: - name: Generate annotations if: always() - uses: crazy-max/.github/.github/actions/gotest-annotations@fa6141aedf23596fb8bdcceab9cce8dadaa31bd9 + uses: crazy-max/.github/.github/actions/gotest-annotations@f91220cba053bd54299ba645a599ee8ed436f222 # v1.11.0 with: directory: ./bin/testreports - diff --git a/.github/workflows/test-os.yml b/.github/workflows/test-os.yml index f212485b4..b1dd41959 100644 --- a/.github/workflows/test-os.yml +++ b/.github/workflows/test-os.yml @@ -150,7 +150,7 @@ jobs: - name: Generate annotations if: always() - uses: crazy-max/.github/.github/actions/gotest-annotations@fa6141aedf23596fb8bdcceab9cce8dadaa31bd9 + uses: crazy-max/.github/.github/actions/gotest-annotations@f91220cba053bd54299ba645a599ee8ed436f222 # v1.11.0 with: directory: ./bin/testreports - From defe94dd8dcbbfcca8bb235158e00818d915e48c Mon Sep 17 00:00:00 2001 From: Janis Horsts Date: Fri, 2 Oct 2026 13:43:58 +0100 Subject: [PATCH 7/7] fix: test-windows --- .github/workflows/test-os.yml | 14 +++++++------- .github/workflows/validate.yml | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test-os.yml b/.github/workflows/test-os.yml index b1dd41959..f9b2990dd 100644 --- a/.github/workflows/test-os.yml +++ b/.github/workflows/test-os.yml @@ -102,19 +102,19 @@ jobs: shell: bash - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - name: Expose GitHub Runtime - uses: crazy-max/ghaction-github-runtime@v3 + uses: crazy-max/ghaction-github-runtime@3cb05d89e1f492524af3d41a1c98c83bc3025124 # v3.1.0 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: go-version: "${{ env.GO_VERSION }}" cache: false - name: Download artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9 with: name: buildkit-windows-amd64 path: ${{ github.workspace }}\bin @@ -141,7 +141,7 @@ jobs: - name: Send to Codecov if: always() - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0 with: directory: ./bin/testreports env_vars: RUNNER_OS @@ -156,7 +156,7 @@ jobs: - name: Upload test reports if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: test-reports-${{ env.TEST_REPORT_NAME }} path: ./bin/testreports @@ -164,7 +164,7 @@ jobs: - name: Dump context if: failure() - uses: crazy-max/ghaction-dump-context@v2 + uses: crazy-max/ghaction-dump-context@4d9eeaf15dd59aa4346919ea84a84ccf514b4db8 # v3.1.0 test-freebsd-amd64: if: false # TODO(jhorsts): Skip freebsd. Fails. Not supported by EarthBuild. Revisit after upstream merge? diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 998095178..b32ca09f9 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -73,20 +73,20 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 with: version: ${{ env.SETUP_BUILDX_VERSION }} driver-opts: image=${{ env.SETUP_BUILDKIT_IMAGE }} buildkitd-flags: --debug - name: Validate - uses: docker/bake-action@v4 + uses: docker/bake-action@3acf805d94d93a86cce4ca44798a76464a75b88c # v6.9.0 with: targets: validate-archutil set: |