diff --git a/.circleci/circleci.txt b/.circleci/circleci.txt new file mode 100644 index 000000000..c7adf9ec1 --- /dev/null +++ b/.circleci/circleci.txt @@ -0,0 +1,78 @@ +# A master build looks like this: + +# BASH_ENV=/tmp/.bash_env-63d018969ca480003a031e62-0-build +# CI=true +# CIRCLECI=true +# CIRCLE_BRANCH=master +# CIRCLE_BUILD_NUM=76545 +# CIRCLE_BUILD_URL=https://circleci.com/gh/tahoe-lafs/tahoe-lafs/76545 +# CIRCLE_JOB=NixOS 21.11 +# CIRCLE_NODE_INDEX=0 +# CIRCLE_NODE_TOTAL=1 +# CIRCLE_PROJECT_REPONAME=tahoe-lafs +# CIRCLE_PROJECT_USERNAME=tahoe-lafs +# CIRCLE_REPOSITORY_URL=git@github.com:tahoe-lafs/tahoe-lafs.git +# CIRCLE_SHA1=ed0bda2d7456f4a2cd60870072e1fe79864a49a1 +# CIRCLE_SHELL_ENV=/tmp/.bash_env-63d018969ca480003a031e62-0-build +# CIRCLE_USERNAME=alice +# CIRCLE_WORKFLOW_ID=6d9bb71c-be3a-4659-bf27-60954180619b +# CIRCLE_WORKFLOW_JOB_ID=0793c975-7b9f-489f-909b-8349b72d2785 +# CIRCLE_WORKFLOW_WORKSPACE_ID=6d9bb71c-be3a-4659-bf27-60954180619b +# CIRCLE_WORKING_DIRECTORY=~/project + +# A build of an in-repo PR looks like this: + +# BASH_ENV=/tmp/.bash_env-63d1971a0298086d8841287e-0-build +# CI=true +# CIRCLECI=true +# CIRCLE_BRANCH=3946-less-chatty-downloads +# CIRCLE_BUILD_NUM=76612 +# CIRCLE_BUILD_URL=https://circleci.com/gh/tahoe-lafs/tahoe-lafs/76612 +# CIRCLE_JOB=NixOS 21.11 +# CIRCLE_NODE_INDEX=0 +# CIRCLE_NODE_TOTAL=1 +# CIRCLE_PROJECT_REPONAME=tahoe-lafs +# CIRCLE_PROJECT_USERNAME=tahoe-lafs +# CIRCLE_PULL_REQUEST=https://github.com/tahoe-lafs/tahoe-lafs/pull/1251 +# CIRCLE_PULL_REQUESTS=https://github.com/tahoe-lafs/tahoe-lafs/pull/1251 +# CIRCLE_REPOSITORY_URL=git@github.com:tahoe-lafs/tahoe-lafs.git +# CIRCLE_SHA1=921a2083dcefdb5f431cdac195fc9ac510605349 +# CIRCLE_SHELL_ENV=/tmp/.bash_env-63d1971a0298086d8841287e-0-build +# CIRCLE_USERNAME=bob +# CIRCLE_WORKFLOW_ID=5e32c12e-be37-4868-9fa8-6a6929fec2f1 +# CIRCLE_WORKFLOW_JOB_ID=316ca408-81b4-4c96-bbdd-644e4c3e01e5 +# CIRCLE_WORKFLOW_WORKSPACE_ID=5e32c12e-be37-4868-9fa8-6a6929fec2f1 +# CIRCLE_WORKING_DIRECTORY=~/project +# CI_PULL_REQUEST=https://github.com/tahoe-lafs/tahoe-lafs/pull/1251 + +# A build of a PR from a fork looks like this: + +# BASH_ENV=/tmp/.bash_env-63d40f7b2e89cd3de10e0db9-0-build +# CI=true +# CIRCLECI=true +# CIRCLE_BRANCH=pull/1252 +# CIRCLE_BUILD_NUM=76678 +# CIRCLE_BUILD_URL=https://circleci.com/gh/tahoe-lafs/tahoe-lafs/76678 +# CIRCLE_JOB=NixOS 21.05 +# CIRCLE_NODE_INDEX=0 +# CIRCLE_NODE_TOTAL=1 +# CIRCLE_PROJECT_REPONAME=tahoe-lafs +# CIRCLE_PROJECT_USERNAME=tahoe-lafs +# CIRCLE_PR_NUMBER=1252 +# CIRCLE_PR_REPONAME=tahoe-lafs +# CIRCLE_PR_USERNAME=carol +# CIRCLE_PULL_REQUEST=https://github.com/tahoe-lafs/tahoe-lafs/pull/1252 +# CIRCLE_PULL_REQUESTS=https://github.com/tahoe-lafs/tahoe-lafs/pull/1252 +# CIRCLE_REPOSITORY_URL=git@github.com:tahoe-lafs/tahoe-lafs.git +# CIRCLE_SHA1=15c7916e0812e6baa2a931cd54b18f3382a8456e +# CIRCLE_SHELL_ENV=/tmp/.bash_env-63d40f7b2e89cd3de10e0db9-0-build +# CIRCLE_USERNAME= +# CIRCLE_WORKFLOW_ID=19c917c8-3a38-4b20-ac10-3265259fa03e +# CIRCLE_WORKFLOW_JOB_ID=58e95215-eccf-4664-a231-1dba7fd2d323 +# CIRCLE_WORKFLOW_WORKSPACE_ID=19c917c8-3a38-4b20-ac10-3265259fa03e +# CIRCLE_WORKING_DIRECTORY=~/project +# CI_PULL_REQUEST=https://github.com/tahoe-lafs/tahoe-lafs/pull/1252 + +# A build of a PR from a fork where the owner has enabled CircleCI looks +# the same as a build of an in-repo PR, except it runs on th owner's +# CircleCI namespace. diff --git a/.circleci/config.yml b/.circleci/config.yml index 051e690b7..152d56810 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -11,20 +11,60 @@ # version: 2.1 +# A template that can be shared between the two different image-building +# workflows. +.images: &IMAGES + jobs: + # Every job that pushes a Docker image from Docker Hub needs to provide + # credentials. Use this first job to define a yaml anchor that can be + # used to supply a CircleCI job context which makes Docker Hub credentials + # available in the environment. + # + # Contexts are managed in the CircleCI web interface: + # + # https://app.circleci.com/settings/organization/github/tahoe-lafs/contexts + - "build-image-debian-11": &DOCKERHUB_CONTEXT + <<: *DOCKERHUB_CONTEXT + - "build-image-ubuntu-20-04": + <<: *DOCKERHUB_CONTEXT + - "build-image-fedora-35": + <<: *DOCKERHUB_CONTEXT + - "build-image-oraclelinux-8": + <<: *DOCKERHUB_CONTEXT + # Restore later as PyPy38 + #- "build-image-pypy27-buster": + # <<: *DOCKERHUB_CONTEXT + +parameters: + # Control whether the image-building workflow runs as part of this pipeline. + # Generally we do not want this to run because we don't need our + # dependencies to move around all the time and because building the image + # takes a couple minutes. + # + # An easy way to trigger a pipeline with this set to true is with the + # rebuild-images.sh tool in this directory. You can also do so via the + # CircleCI web UI. + build-images: + default: false + type: "boolean" + + # Control whether the test-running workflow runs as part of this pipeline. + # Generally we do want this to run because running the tests is the primary + # purpose of this pipeline. + run-tests: + default: true + type: "boolean" + workflows: ci: + when: "<< pipeline.parameters.run-tests >>" jobs: # Start with jobs testing various platforms. - - "debian-10": - {} - "debian-11": {} - "ubuntu-20-04": {} - - "ubuntu-18-04": - requires: - - "ubuntu-20-04" # Equivalent to RHEL 8; CentOS 8 is dead. - "oraclelinux-8": @@ -54,6 +94,9 @@ workflows: {} - "integration": + # Run even the slow integration tests here. We need the `--` to + # sneak past tox and get to pytest. + tox-args: "-- --runslow integration" requires: # If the unit test suite doesn't pass, don't bother running the # integration tests. @@ -65,41 +108,10 @@ workflows: {} images: - # Build the Docker images used by the ci jobs. This makes the ci jobs - # faster and takes various spurious failures out of the critical path. - triggers: - # Build once a day - - schedule: - cron: "0 0 * * *" - filters: - branches: - only: - - "master" + <<: *IMAGES - jobs: - # Every job that pushes a Docker image from Docker Hub needs to provide - # credentials. Use this first job to define a yaml anchor that can be - # used to supply a CircleCI job context which makes Docker Hub - # credentials available in the environment. - # - # Contexts are managed in the CircleCI web interface: - # - # https://app.circleci.com/settings/organization/github/tahoe-lafs/contexts - - "build-image-debian-10": &DOCKERHUB_CONTEXT - context: "dockerhub-auth" - - "build-image-debian-11": - <<: *DOCKERHUB_CONTEXT - - "build-image-ubuntu-18-04": - <<: *DOCKERHUB_CONTEXT - - "build-image-ubuntu-20-04": - <<: *DOCKERHUB_CONTEXT - - "build-image-fedora-35": - <<: *DOCKERHUB_CONTEXT - - "build-image-oraclelinux-8": - <<: *DOCKERHUB_CONTEXT - # Restore later as PyPy38 - #- "build-image-pypy27-buster": - # <<: *DOCKERHUB_CONTEXT + # Build as part of the workflow but only if requested. + when: "<< pipeline.parameters.build-images >>" jobs: @@ -133,10 +145,10 @@ jobs: steps: - "checkout" - - run: + - run: &INSTALL_TOX name: "Install tox" command: | - pip install --user tox + pip install --user 'tox~=3.0' - run: name: "Static-ish code checks" @@ -152,9 +164,7 @@ jobs: - "checkout" - run: - name: "Install tox" - command: | - pip install --user tox + <<: *INSTALL_TOX - run: name: "Make PyInstaller executable" @@ -169,12 +179,7 @@ jobs: command: | dist/Tahoe-LAFS/tahoe --version - debian-10: &DEBIAN - docker: - - <<: *DOCKERHUB_AUTH - image: "tahoelafsci/debian:10-py3.7" - user: "nobody" - + debian-11: &DEBIAN environment: &UTF_8_ENVIRONMENT # In general, the test suite is not allowed to fail while the job # succeeds. But you can set this to "yes" if you want it to be @@ -186,7 +191,7 @@ jobs: # filenames and argv). LANG: "en_US.UTF-8" # Select a tox environment to run for this job. - TAHOE_LAFS_TOX_ENVIRONMENT: "py37" + TAHOE_LAFS_TOX_ENVIRONMENT: "py39" # Additional arguments to pass to tox. TAHOE_LAFS_TOX_ARGS: "" # The path in which test artifacts will be placed. @@ -254,15 +259,11 @@ jobs: /tmp/venv/bin/codecov fi - debian-11: - <<: *DEBIAN docker: - <<: *DOCKERHUB_AUTH image: "tahoelafsci/debian:11-py3.9" user: "nobody" - environment: - <<: *UTF_8_ENVIRONMENT - TAHOE_LAFS_TOX_ENVIRONMENT: "py39" + # Restore later using PyPy3.8 # pypy27-buster: @@ -296,6 +297,14 @@ jobs: integration: <<: *DEBIAN + + parameters: + tox-args: + description: >- + Additional arguments to pass to the tox command. + type: "string" + default: "" + docker: - <<: *DOCKERHUB_AUTH image: "tahoelafsci/debian:11-py3.9" @@ -308,28 +317,15 @@ jobs: # Disable artifact collection because py.test can't produce any. ARTIFACTS_OUTPUT_PATH: "" + # Pass on anything we got in our parameters. + TAHOE_LAFS_TOX_ARGS: "<< parameters.tox-args >>" + steps: - "checkout" # DRY, YAML-style. See the debian-9 steps. - run: *SETUP_VIRTUALENV - run: *RUN_TESTS - ubuntu-18-04: &UBUNTU_18_04 - <<: *DEBIAN - docker: - - <<: *DOCKERHUB_AUTH - image: "tahoelafsci/ubuntu:18.04-py3.7" - user: "nobody" - - environment: - <<: *UTF_8_ENVIRONMENT - # The default trial args include --rterrors which is incompatible with - # this reporter on Python 3. So drop that and just specify the - # reporter. - TAHOE_LAFS_TRIAL_ARGS: "--reporter=subunitv2-file" - TAHOE_LAFS_TOX_ENVIRONMENT: "py37" - - ubuntu-20-04: <<: *DEBIAN docker: @@ -382,7 +378,7 @@ jobs: docker: # Run in a highly Nix-capable environment. - <<: *DOCKERHUB_AUTH - image: "nixos/nix:2.3.16" + image: "nixos/nix:2.10.3" environment: # CACHIX_AUTH_TOKEN is manually set in the CircleCI web UI and @@ -392,27 +388,21 @@ jobs: steps: - "run": - # The nixos/nix image does not include ssh. Install it so the - # `checkout` step will succeed. We also want cachix for - # Nix-friendly caching. + # Get cachix for Nix-friendly caching. name: "Install Basic Dependencies" command: | + NIXPKGS="https://github.com/nixos/nixpkgs/archive/nixos-<>.tar.gz" nix-env \ - --file https://github.com/nixos/nixpkgs/archive/nixos-<>.tar.gz \ + --file $NIXPKGS \ --install \ - -A openssh cachix bash + -A cachix bash + # Activate it for "binary substitution". This sets up + # configuration tht lets Nix download something from the cache + # instead of building it locally, if possible. + cachix use "${CACHIX_NAME}" - "checkout" - - run: - name: "Cachix setup" - # Record the store paths that exist before we did much. There's no - # reason to cache these, they're either in the image or have to be - # retrieved before we can use cachix to restore from cache. - command: | - cachix use "${CACHIX_NAME}" - nix path-info --all > /tmp/store-path-pre-build - - "run": # The Nix package doesn't know how to do this part, unfortunately. name: "Generate version" @@ -434,55 +424,26 @@ jobs: # build a couple simple little dependencies that don't take # advantage of multiple cores and we get a little speedup by doing # them in parallel. - nix-build --cores 3 --max-jobs 2 --argstr pkgsVersion "nixpkgs-<>" + source .circleci/lib.sh + cache_if_able nix-build \ + --cores 3 \ + --max-jobs 2 \ + --argstr pkgsVersion "nixpkgs-<>" - "run": name: "Test" command: | # Let it go somewhat wild for the test suite itself - nix-build --cores 8 --argstr pkgsVersion "nixpkgs-<>" tests.nix - - - run: - # Send any new store objects to cachix. - name: "Push to Cachix" - when: "always" - command: | - # Cribbed from - # https://circleci.com/blog/managing-secrets-when-you-have-pull-requests-from-outside-contributors/ - if [ -n "$CIRCLE_PR_NUMBER" ]; then - # I'm sure you're thinking "CIRCLE_PR_NUMBER must just be the - # number of the PR being built". Sorry, dear reader, you have - # guessed poorly. It is also conditionally set based on whether - # this is a PR from a fork or not. - # - # https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables - echo "Skipping Cachix push for forked PR." - else - # If this *isn't* a build from a fork then we have the Cachix - # write key in our environment and we can push any new objects - # to Cachix. - # - # To decide what to push, we inspect the list of store objects - # that existed before and after we did most of our work. Any - # that are new after the work is probably a useful thing to have - # around so push it to the cache. We exclude all derivation - # objects (.drv files) because they're cheap to reconstruct and - # by the time you know their cache key you've already done all - # the work anyway. - # - # This shell expression for finding the objects and pushing them - # was from the Cachix docs: - # - # https://docs.cachix.org/continuous-integration-setup/circleci.html - # - # but they seem to have removed it now. - bash -c "comm -13 <(sort /tmp/store-path-pre-build | grep -v '\.drv$') <(nix path-info --all | grep -v '\.drv$' | sort) | cachix push $CACHIX_NAME" - fi + source .circleci/lib.sh + cache_if_able nix-build \ + --cores 8 \ + --argstr pkgsVersion "nixpkgs-<>" \ + tests.nix typechecks: docker: - <<: *DOCKERHUB_AUTH - image: "tahoelafsci/ubuntu:18.04-py3.7" + image: "tahoelafsci/ubuntu:20.04-py3.9" steps: - "checkout" @@ -494,7 +455,7 @@ jobs: docs: docker: - <<: *DOCKERHUB_AUTH - image: "tahoelafsci/ubuntu:18.04-py3.7" + image: "tahoelafsci/ubuntu:20.04-py3.9" steps: - "checkout" @@ -545,15 +506,6 @@ jobs: docker push tahoelafsci/${DISTRO}:${TAG}-py${PYTHON_VERSION} - build-image-debian-10: - <<: *BUILD_IMAGE - - environment: - DISTRO: "debian" - TAG: "10" - PYTHON_VERSION: "3.7" - - build-image-debian-11: <<: *BUILD_IMAGE @@ -562,14 +514,6 @@ jobs: TAG: "11" PYTHON_VERSION: "3.9" - build-image-ubuntu-18-04: - <<: *BUILD_IMAGE - - environment: - DISTRO: "ubuntu" - TAG: "18.04" - PYTHON_VERSION: "3.7" - build-image-ubuntu-20-04: <<: *BUILD_IMAGE diff --git a/.circleci/lib.sh b/.circleci/lib.sh new file mode 100644 index 000000000..c692b5f88 --- /dev/null +++ b/.circleci/lib.sh @@ -0,0 +1,119 @@ +# Run a command, enabling cache writes to cachix if possible. The command is +# accepted as a variable number of positional arguments (like argv). +function cache_if_able() { + # Dump some info about our build environment. + describe_build + + if is_cache_writeable; then + # If the cache is available we'll use it. This lets fork owners set + # up their own caching if they want. + echo "Cachix credentials present; will attempt to write to cache." + + # The `cachix watch-exec ...` does our cache population. When it sees + # something added to the store (I guess) it pushes it to the named + # cache. + cachix watch-exec "${CACHIX_NAME}" -- "$@" + else + if is_cache_required; then + echo "Required credentials (CACHIX_AUTH_TOKEN) are missing." + return 1 + else + echo "Cachix credentials missing; will not attempt cache writes." + "$@" + fi + fi +} + +function is_cache_writeable() { + # We can only *push* to the cache if we have a CACHIX_AUTH_TOKEN. in-repo + # jobs will get this from CircleCI configuration but jobs from forks may + # not. + [ -v CACHIX_AUTH_TOKEN ] +} + +function is_cache_required() { + # If we're building in tahoe-lafs/tahoe-lafs then we must use the cache. + # If we're building anything from a fork then we're allowed to not have + # the credentials. + is_upstream +} + +# Return success if the origin of this build is the tahoe-lafs/tahoe-lafs +# repository itself (and so we expect to have cache credentials available), +# failure otherwise. +# +# See circleci.txt for notes about how this determination is made. +function is_upstream() { + # CIRCLE_PROJECT_USERNAME is set to the org the build is happening for. + # If a PR targets a fork of the repo then this is set to something other + # than "tahoe-lafs". + [ "$CIRCLE_PROJECT_USERNAME" == "tahoe-lafs" ] && + + # CIRCLE_BRANCH is set to the real branch name for in-repo PRs and + # "pull/NNNN" for pull requests from forks. + # + # CIRCLE_PULL_REQUESTS is set to a comma-separated list of the full + # URLs of the PR pages which share an underlying branch, with one of + # them ended with that same "pull/NNNN" for PRs from forks. + ! any_element_endswith "/$CIRCLE_BRANCH" "," "$CIRCLE_PULL_REQUESTS" +} + +# Return success if splitting $3 on $2 results in an array with any element +# that ends with $1, failure otherwise. +function any_element_endswith() { + suffix=$1 + shift + + sep=$1 + shift + + haystack=$1 + shift + + IFS="${sep}" read -r -a elements <<< "$haystack" + for elem in "${elements[@]}"; do + if endswith "$suffix" "$elem"; then + return 0 + fi + done + return 1 +} + +# Return success if $2 ends with $1, failure otherwise. +function endswith() { + suffix=$1 + shift + + haystack=$1 + shift + + case "$haystack" in + *${suffix}) + return 0 + ;; + + *) + return 1 + ;; + esac +} + +function describe_build() { + echo "Building PR for user/org: ${CIRCLE_PROJECT_USERNAME}" + echo "Building branch: ${CIRCLE_BRANCH}" + if is_upstream; then + echo "Upstream build." + else + echo "Non-upstream build." + fi + if is_cache_required; then + echo "Cache is required." + else + echo "Cache not required." + fi + if is_cache_writeable; then + echo "Cache is writeable." + else + echo "Cache not writeable." + fi +} diff --git a/.circleci/populate-wheelhouse.sh b/.circleci/populate-wheelhouse.sh index 519a80cac..857171979 100755 --- a/.circleci/populate-wheelhouse.sh +++ b/.circleci/populate-wheelhouse.sh @@ -9,7 +9,7 @@ BASIC_DEPS="pip wheel" # Python packages we need to support the test infrastructure. *Not* packages # Tahoe-LAFS itself (implementation or test suite) need. -TEST_DEPS="tox codecov" +TEST_DEPS="tox~=3.0 codecov" # Python packages we need to generate test reports for CI infrastructure. # *Not* packages Tahoe-LAFS itself (implement or test suite) need. diff --git a/.circleci/rebuild-images.sh b/.circleci/rebuild-images.sh new file mode 100755 index 000000000..901651905 --- /dev/null +++ b/.circleci/rebuild-images.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Get your API token here: +# https://app.circleci.com/settings/user/tokens +API_TOKEN=$1 +shift + +# Name the branch you want to trigger the build for +BRANCH=$1 +shift + +curl \ + --verbose \ + --request POST \ + --url https://circleci.com/api/v2/project/gh/tahoe-lafs/tahoe-lafs/pipeline \ + --header "Circle-Token: $API_TOKEN" \ + --header "content-type: application/json" \ + --data '{"branch":"'"$BRANCH"'","parameters":{"build-images":true,"run-tests":false}}' diff --git a/.circleci/run-tests.sh b/.circleci/run-tests.sh index 764651c40..6d7a881fe 100755 --- a/.circleci/run-tests.sh +++ b/.circleci/run-tests.sh @@ -45,14 +45,15 @@ fi # A prefix for the test command that ensure it will exit after no more than a # certain amount of time. Ideally, we would only enforce a "silent" period -# timeout but there isn't obviously a ready-made tool for that. The test -# suite only takes about 5 - 6 minutes on CircleCI right now. 15 minutes -# seems like a moderately safe window. +# timeout but there isn't obviously a ready-made tool for that. The unit test +# suite only takes about 5 - 6 minutes on CircleCI right now. The integration +# tests are a bit longer than that. 45 minutes seems like a moderately safe +# window. # # This is primarily aimed at catching hangs on the PyPy job which runs for # about 21 minutes and then gets killed by CircleCI in a way that fails the # job and bypasses our "allowed failure" logic. -TIMEOUT="timeout --kill-after 1m 15m" +TIMEOUT="timeout --kill-after 1m 45m" # Run the test suite as a non-root user. This is the expected usage some # small areas of the test suite assume non-root privileges (such as unreadable diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0327014ca..4d67f09bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,16 @@ on: - "master" pull_request: +# At the start of each workflow run, GitHub creates a unique +# GITHUB_TOKEN secret to use in the workflow. It is a good idea for +# this GITHUB_TOKEN to have the minimum of permissions. See: +# +# - https://docs.github.com/en/actions/security-guides/automatic-token-authentication +# - https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions +# +permissions: + contents: read + # Control to what degree jobs in this workflow will run concurrently with # other instances of themselves. # @@ -38,73 +48,66 @@ jobs: - windows-latest - ubuntu-latest python-version: - - "3.7" - "3.8" - "3.9" - "3.10" include: - # On macOS don't bother with 3.7-3.8, just to get faster builds. + # On macOS don't bother with 3.8, just to get faster builds. - os: macos-latest python-version: "3.9" - os: macos-latest python-version: "3.10" # We only support PyPy on Linux at the moment. - - os: ubuntu-latest - python-version: "pypy-3.7" - os: ubuntu-latest python-version: "pypy-3.8" - + - os: ubuntu-latest + python-version: "pypy-3.9" + steps: # See https://github.com/actions/checkout. A fetch-depth of 0 # fetches all tags and branches. - name: Check out Tahoe-LAFS sources - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - # To use pip caching with GitHub Actions in an OS-independent - # manner, we need `pip cache dir` command, which became - # available since pip v20.1+. At the time of writing this, - # GitHub Actions offers pip v20.3.3 for both ubuntu-latest and - # windows-latest, and pip v20.3.1 for macos-latest. - - name: Get pip cache directory - id: pip-cache - run: | - echo "::set-output name=dir::$(pip cache dir)" - - # See https://github.com/actions/cache - - name: Use pip cache - uses: actions/cache@v2 - with: - path: ${{ steps.pip-cache.outputs.dir }} - key: ${{ runner.os }}-pip-${{ hashFiles('**/setup.py') }} - restore-keys: | - ${{ runner.os }}-pip- + cache: 'pip' # caching pip dependencies - name: Install Python packages run: | - pip install --upgrade codecov tox tox-gh-actions setuptools + pip install --upgrade codecov "tox<4" tox-gh-actions setuptools pip list - name: Display tool versions run: python misc/build_helpers/show-tool-versions.py - name: Run tox for corresponding Python version + if: ${{ !contains(matrix.os, 'windows') }} run: python -m tox + # On Windows, a non-blocking pipe might respond (when emulating Unix-y + # API) with ENOSPC to indicate buffer full. Trial doesn't handle this + # well, so it breaks test runs. To attempt to solve this, we pipe the + # output through passthrough.py that will hopefully be able to do the right + # thing by using Windows APIs. + - name: Run tox for corresponding Python version + if: ${{ contains(matrix.os, 'windows') }} + run: | + pip install twisted pywin32 + python -m tox | python misc/windows-enospc/passthrough.py + - name: Upload eliot.log - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v3 with: name: eliot.log path: eliot.log - name: Upload trial log - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v3 with: name: test.log path: _trial_temp/test.log @@ -161,21 +164,22 @@ jobs: strategy: fail-fast: false matrix: - os: - - windows-latest - - ubuntu-latest - python-version: - - 3.7 - - 3.9 include: - # On macOS don't bother with 3.7, just to get faster builds. - os: macos-latest - python-version: 3.9 - + python-version: "3.9" + force-foolscap: false + - os: windows-latest + python-version: "3.9" + force-foolscap: false + # 22.04 has some issue with Tor at the moment: + # https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3943 + - os: ubuntu-20.04 + python-version: "3.9" + force-foolscap: false steps: - name: Install Tor [Ubuntu] - if: matrix.os == 'ubuntu-latest' + if: ${{ contains(matrix.os, 'ubuntu') }} run: sudo apt install tor # TODO: See https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3744. @@ -188,51 +192,51 @@ jobs: - name: Install Tor [Windows] if: matrix.os == 'windows-latest' - uses: crazy-max/ghaction-chocolatey@v1 + uses: crazy-max/ghaction-chocolatey@v2 with: args: install tor - name: Check out Tahoe-LAFS sources - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - - name: Get pip cache directory - id: pip-cache - run: | - echo "::set-output name=dir::$(pip cache dir)" - - - name: Use pip cache - uses: actions/cache@v2 - with: - path: ${{ steps.pip-cache.outputs.dir }} - key: ${{ runner.os }}-pip-${{ hashFiles('**/setup.py') }} - restore-keys: | - ${{ runner.os }}-pip- + cache: 'pip' # caching pip dependencies - name: Install Python packages run: | - pip install --upgrade tox + pip install --upgrade "tox<4" pip list - name: Display tool versions run: python misc/build_helpers/show-tool-versions.py - name: Run "Python 3 integration tests" + if: "${{ !matrix.force-foolscap }}" env: # On macOS this is necessary to ensure unix socket paths for tor # aren't too long. On Windows tox won't pass it through so it has no # effect. On Linux it doesn't make a difference one way or another. TMPDIR: "/tmp" - run: tox -e integration + run: | + tox -e integration + + - name: Run "Python 3 integration tests (force Foolscap)" + if: "${{ matrix.force-foolscap }}" + env: + # On macOS this is necessary to ensure unix socket paths for tor + # aren't too long. On Windows tox won't pass it through so it has no + # effect. On Linux it doesn't make a difference one way or another. + TMPDIR: "/tmp" + run: | + tox -e integration -- --force-foolscap integration/ - name: Upload eliot.log in case of failure - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v3 if: failure() with: name: integration.eliot.json @@ -253,31 +257,19 @@ jobs: steps: - name: Check out Tahoe-LAFS sources - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - - name: Get pip cache directory - id: pip-cache - run: | - echo "::set-output name=dir::$(pip cache dir)" - - - name: Use pip cache - uses: actions/cache@v2 - with: - path: ${{ steps.pip-cache.outputs.dir }} - key: ${{ runner.os }}-pip-${{ hashFiles('**/setup.py') }} - restore-keys: | - ${{ runner.os }}-pip- + cache: 'pip' # caching pip dependencies - name: Install Python packages run: | - pip install --upgrade tox + pip install --upgrade "tox<4" pip list - name: Display tool versions @@ -291,7 +283,7 @@ jobs: run: dist/Tahoe-LAFS/tahoe --version - name: Upload PyInstaller package - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: Tahoe-LAFS-${{ matrix.os }}-Python-${{ matrix.python-version }} path: dist/Tahoe-LAFS-*-*.* diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 842093fdb..000000000 --- a/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM python:2.7 - -ADD . /tahoe-lafs -RUN \ - cd /tahoe-lafs && \ - git pull --depth=100 && \ - pip install . && \ - rm -rf ~/.cache/ - -WORKDIR /root diff --git a/Dockerfile.dev b/Dockerfile.dev deleted file mode 100644 index b0fd24b5e..000000000 --- a/Dockerfile.dev +++ /dev/null @@ -1,25 +0,0 @@ -FROM debian:9 -LABEL maintainer "gordon@leastauthority.com" -RUN apt-get update -RUN DEBIAN_FRONTEND=noninteractive apt-get -yq upgrade -RUN DEBIAN_FRONTEND=noninteractive apt-get -yq install build-essential python-dev libffi-dev libssl-dev python-virtualenv git -RUN \ - git clone https://github.com/tahoe-lafs/tahoe-lafs.git /root/tahoe-lafs; \ - cd /root/tahoe-lafs; \ - virtualenv --python=python2.7 venv; \ - ./venv/bin/pip install --upgrade setuptools; \ - ./venv/bin/pip install --editable .; \ - ./venv/bin/tahoe --version; -RUN \ - cd /root; \ - mkdir /root/.tahoe-client; \ - mkdir /root/.tahoe-introducer; \ - mkdir /root/.tahoe-server; -RUN /root/tahoe-lafs/venv/bin/tahoe create-introducer --location=tcp:introducer:3458 --port=tcp:3458 /root/.tahoe-introducer -RUN /root/tahoe-lafs/venv/bin/tahoe start /root/.tahoe-introducer -RUN /root/tahoe-lafs/venv/bin/tahoe create-node --location=tcp:server:3457 --port=tcp:3457 --introducer=$(cat /root/.tahoe-introducer/private/introducer.furl) /root/.tahoe-server -RUN /root/tahoe-lafs/venv/bin/tahoe create-client --webport=3456 --introducer=$(cat /root/.tahoe-introducer/private/introducer.furl) --basedir=/root/.tahoe-client --shares-needed=1 --shares-happy=1 --shares-total=1 -VOLUME ["/root/.tahoe-client", "/root/.tahoe-server", "/root/.tahoe-introducer"] -EXPOSE 3456 3457 3458 -ENTRYPOINT ["/root/tahoe-lafs/venv/bin/tahoe"] -CMD [] diff --git a/README.rst b/README.rst index 317378fae..bbf88610d 100644 --- a/README.rst +++ b/README.rst @@ -56,7 +56,7 @@ Once ``tahoe --version`` works, see `How to Run Tahoe-LAFS `__ 🐍 Python 2 ----------- -Python 3.7 or later is now required. +Python 3.8 or later is required. If you are still using Python 2.7, use Tahoe-LAFS version 1.17.1. diff --git a/benchmarks/upload_download.py b/benchmarks/upload_download.py new file mode 100644 index 000000000..aa5f506bc --- /dev/null +++ b/benchmarks/upload_download.py @@ -0,0 +1,106 @@ +""" +First attempt at benchmarking uploads and downloads. + +To run: + +$ pytest benchmarks/upload_download.py -s -v -Wignore + +TODO Parameterization (pytest?) + + - Foolscap vs not foolscap + + - Number of nodes + + - Data size + + - Number of needed/happy/total shares. + +CAVEATS: The goal here isn't a realistic benchmark, or a benchmark that will be +measured over time, or is expected to be maintainable over time. This is just +a quick and easy way to measure the speed of certain operations, compare HTTP +and Foolscap, and see the short-term impact of changes. + +Eventually this will be replaced by a real benchmark suite that can be run over +time to measure something more meaningful. +""" + +from time import time, process_time +from contextlib import contextmanager +from tempfile import mkdtemp +import os + +from twisted.trial.unittest import TestCase + +from allmydata.util.deferredutil import async_to_deferred +from allmydata.util.consumer import MemoryConsumer +from allmydata.test.common_system import SystemTestMixin +from allmydata.immutable.upload import Data as UData +from allmydata.mutable.publish import MutableData + + +@contextmanager +def timeit(name): + start = time() + start_cpu = process_time() + try: + yield + finally: + print( + f"{name}: {time() - start:.3f} elapsed, {process_time() - start_cpu:.3f} CPU" + ) + + +class ImmutableBenchmarks(SystemTestMixin, TestCase): + """Benchmarks for immutables.""" + + # To use Foolscap, change to True: + FORCE_FOOLSCAP_FOR_STORAGE = False + + @async_to_deferred + async def setUp(self): + SystemTestMixin.setUp(self) + self.basedir = os.path.join(mkdtemp(), "nodes") + + # 2 nodes + await self.set_up_nodes(2) + + # 1 share + for c in self.clients: + c.encoding_params["k"] = 1 + c.encoding_params["happy"] = 1 + c.encoding_params["n"] = 1 + + print() + + @async_to_deferred + async def test_upload_and_download_immutable(self): + # To test larger files, change this: + DATA = b"Some data to upload\n" * 10 + + for i in range(5): + # 1. Upload: + with timeit(" upload"): + uploader = self.clients[0].getServiceNamed("uploader") + results = await uploader.upload(UData(DATA, convergence=None)) + + # 2. Download: + with timeit("download"): + uri = results.get_uri() + node = self.clients[1].create_node_from_uri(uri) + mc = await node.read(MemoryConsumer(), 0, None) + self.assertEqual(b"".join(mc.chunks), DATA) + + @async_to_deferred + async def test_upload_and_download_mutable(self): + # To test larger files, change this: + DATA = b"Some data to upload\n" * 10 + + for i in range(5): + # 1. Upload: + with timeit(" upload"): + result = await self.clients[0].create_mutable_file(MutableData(DATA)) + + # 2. Download: + with timeit("download"): + data = await result.download_best_version() + self.assertEqual(data, DATA) diff --git a/default.nix b/default.nix index 5f4db2c78..e4f2dd4d4 100644 --- a/default.nix +++ b/default.nix @@ -29,7 +29,7 @@ in , pypiData ? sources.pypi-deps-db # the pypi package database snapshot to use # for dependency resolution -, pythonVersion ? "python37" # a string choosing the python derivation from +, pythonVersion ? "python39" # a string choosing the python derivation from # nixpkgs to target , extras ? [ "tor" "i2p" ] # a list of strings identifying tahoe-lafs extras, diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 1d23be71a..000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,49 +0,0 @@ -version: '2' -services: - client: - build: - context: . - dockerfile: ./Dockerfile.dev - volumes: - - ./misc:/root/tahoe-lafs/misc - - ./integration:/root/tahoe-lafs/integration - - ./src:/root/tahoe-lafs/static - - ./setup.cfg:/root/tahoe-lafs/setup.cfg - - ./setup.py:/root/tahoe-lafs/setup.py - ports: - - "127.0.0.1:3456:3456" - depends_on: - - "introducer" - - "server" - entrypoint: /root/tahoe-lafs/venv/bin/tahoe - command: ["run", "/root/.tahoe-client"] - server: - build: - context: . - dockerfile: ./Dockerfile.dev - volumes: - - ./misc:/root/tahoe-lafs/misc - - ./integration:/root/tahoe-lafs/integration - - ./src:/root/tahoe-lafs/static - - ./setup.cfg:/root/tahoe-lafs/setup.cfg - - ./setup.py:/root/tahoe-lafs/setup.py - ports: - - "127.0.0.1:3457:3457" - depends_on: - - "introducer" - entrypoint: /root/tahoe-lafs/venv/bin/tahoe - command: ["run", "/root/.tahoe-server"] - introducer: - build: - context: . - dockerfile: ./Dockerfile.dev - volumes: - - ./misc:/root/tahoe-lafs/misc - - ./integration:/root/tahoe-lafs/integration - - ./src:/root/tahoe-lafs/static - - ./setup.cfg:/root/tahoe-lafs/setup.cfg - - ./setup.py:/root/tahoe-lafs/setup.py - ports: - - "127.0.0.1:3458:3458" - entrypoint: /root/tahoe-lafs/venv/bin/tahoe - command: ["run", "/root/.tahoe-introducer"] diff --git a/docs/proposed/http-storage-node-protocol.rst b/docs/proposed/http-storage-node-protocol.rst index a44408e6c..aee201cf5 100644 --- a/docs/proposed/http-storage-node-protocol.rst +++ b/docs/proposed/http-storage-node-protocol.rst @@ -30,12 +30,12 @@ Glossary introducer a Tahoe-LAFS process at a known location configured to re-publish announcements about the location of storage servers - fURL + :ref:`fURLs ` a self-authenticating URL-like string which can be used to locate a remote object using the Foolscap protocol (the storage service is an example of such an object) - NURL - a self-authenticating URL-like string almost exactly like a NURL but without being tied to Foolscap + :ref:`NURLs ` + a self-authenticating URL-like string almost exactly like a fURL but without being tied to Foolscap swissnum a short random string which is part of a fURL/NURL and which acts as a shared secret to authorize clients to use a storage service @@ -579,24 +579,6 @@ Responses: the response is ``CONFLICT``. At this point the only thing to do is abort the upload and start from scratch (see below). -``PUT /storage/v1/immutable/:storage_index/:share_number/abort`` -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -This cancels an *in-progress* upload. - -The request must include a ``X-Tahoe-Authorization`` header that includes the upload secret:: - - X-Tahoe-Authorization: upload-secret - -The response code: - -* When the upload is still in progress and therefore the abort has succeeded, - the response is ``OK``. - Future uploads can start from scratch with no pre-existing upload state stored on the server. -* If the uploaded has already finished, the response is 405 (Method Not Allowed) - and no change is made. - - Discussion `````````` @@ -615,6 +597,25 @@ From RFC 7231:: PATCH method defined in [RFC5789]). + +``PUT /storage/v1/immutable/:storage_index/:share_number/abort`` +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +This cancels an *in-progress* upload. + +The request must include a ``X-Tahoe-Authorization`` header that includes the upload secret:: + + X-Tahoe-Authorization: upload-secret + +The response code: + +* When the upload is still in progress and therefore the abort has succeeded, + the response is ``OK``. + Future uploads can start from scratch with no pre-existing upload state stored on the server. +* If the uploaded has already finished, the response is 405 (Method Not Allowed) + and no change is made. + + ``POST /storage/v1/immutable/:storage_index/:share_number/corrupt`` !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -624,7 +625,7 @@ corruption. It also includes potentially important details about the share. For example:: - {"reason": u"expected hash abcd, got hash efgh"} + {"reason": "expected hash abcd, got hash efgh"} .. share-type, storage-index, and share-number are inferred from the URL @@ -798,6 +799,7 @@ Immutable Data 200 OK + { "required": [ {"begin": 16, "end": 48 } ] } PATCH /storage/v1/immutable/AAAAAAAAAAAAAAAA/7 Authorization: Tahoe-LAFS nurl-swissnum @@ -806,6 +808,7 @@ Immutable Data 200 OK + { "required": [ {"begin": 32, "end": 48 } ] } PATCH /storage/v1/immutable/AAAAAAAAAAAAAAAA/7 Authorization: Tahoe-LAFS nurl-swissnum @@ -822,6 +825,7 @@ Immutable Data Range: bytes=0-47 200 OK + Content-Range: bytes 0-47/48 #. Renew the lease on all immutable shares in bucket ``AAAAAAAAAAAAAAAA``:: @@ -905,9 +909,12 @@ otherwise it will read a byte which won't match `b""`:: #. Download the contents of share number ``3``:: - GET /storage/v1/mutable/BBBBBBBBBBBBBBBB?share=3&offset=0&size=10 + GET /storage/v1/mutable/BBBBBBBBBBBBBBBB?share=3 Authorization: Tahoe-LAFS nurl-swissnum + Range: bytes=0-16 + 200 OK + Content-Range: bytes 0-15/16 #. Renew the lease on previously uploaded mutable share in slot ``BBBBBBBBBBBBBBBB``:: diff --git a/docs/specifications/url.rst b/docs/specifications/url.rst index fe756208b..12e2b8642 100644 --- a/docs/specifications/url.rst +++ b/docs/specifications/url.rst @@ -7,6 +7,8 @@ These are not to be confused with the URI-like capabilities Tahoe-LAFS uses to r An attempt is also made to outline the rationale for certain choices about these URLs. The intended audience for this document is Tahoe-LAFS maintainers and other developers interested in interoperating with Tahoe-LAFS or these URLs. +.. _furls: + Background ---------- @@ -31,6 +33,8 @@ The client's use of the swissnum is what allows the server to authorize the clie .. _`swiss number`: http://wiki.erights.org/wiki/Swiss_number +.. _NURLs: + NURLs ----- diff --git a/integration/conftest.py b/integration/conftest.py index e284b5cba..dc0107eea 100644 --- a/integration/conftest.py +++ b/integration/conftest.py @@ -1,15 +1,6 @@ """ Ported to Python 3. """ -from __future__ import unicode_literals -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 - import sys import shutil from time import sleep @@ -49,7 +40,6 @@ from .util import ( await_client_ready, TahoeProcess, cli, - _run_node, generate_ssh_key, block_with_timeout, ) @@ -66,6 +56,29 @@ def pytest_addoption(parser): "--coverage", action="store_true", dest="coverage", help="Collect coverage statistics", ) + parser.addoption( + "--force-foolscap", action="store_true", default=False, + dest="force_foolscap", + help=("If set, force Foolscap only for the storage protocol. " + + "Otherwise HTTP will be used.") + ) + parser.addoption( + "--runslow", action="store_true", default=False, + dest="runslow", + help="If set, run tests marked as slow.", + ) + +def pytest_collection_modifyitems(session, config, items): + if not config.option.runslow: + # The --runslow option was not given; keep only collected items not + # marked as slow. + items[:] = [ + item + for item + in items + if item.get_closest_marker("slow") is None + ] + @pytest.fixture(autouse=True, scope='session') def eliot_logging(): @@ -410,10 +423,9 @@ alice-key ssh-rsa {ssh_public_key} {rwcap} """.format(rwcap=rwcap, ssh_public_key=ssh_public_key)) # 4. Restart the node with new SFTP config. - process.kill() - pytest_twisted.blockon(_run_node(reactor, process.node_dir, request, None)) - + pytest_twisted.blockon(process.restart_async(reactor, request)) await_client_ready(process) + print(f"Alice pid: {process.transport.pid}") return process diff --git a/integration/test_vectors.py b/integration/test_vectors.py new file mode 100644 index 000000000..3e0790786 --- /dev/null +++ b/integration/test_vectors.py @@ -0,0 +1,119 @@ +""" +Verify certain results against test vectors with well-known results. +""" + +from __future__ import annotations + +from functools import partial +from typing import AsyncGenerator, Iterator +from itertools import starmap, product + +from attrs import evolve + +from pytest import mark +from pytest_twisted import ensureDeferred + +from . import vectors +from .vectors import parameters +from .util import reconfigure, upload, TahoeProcess + +@mark.parametrize('convergence', parameters.CONVERGENCE_SECRETS) +def test_convergence(convergence): + """ + Convergence secrets are 16 bytes. + """ + assert isinstance(convergence, bytes), "Convergence secret must be bytes" + assert len(convergence) == 16, "Convergence secret must by 16 bytes" + + +@mark.slow +@mark.parametrize('case,expected', vectors.capabilities.items()) +@ensureDeferred +async def test_capability(reactor, request, alice, case, expected): + """ + The capability that results from uploading certain well-known data + with certain well-known parameters results in exactly the previously + computed value. + """ + # rewrite alice's config to match params and convergence + await reconfigure(reactor, request, alice, (1, case.params.required, case.params.total), case.convergence) + + # upload data in the correct format + actual = upload(alice, case.fmt, case.data) + + # compare the resulting cap to the expected result + assert actual == expected + + +@ensureDeferred +async def skiptest_generate(reactor, request, alice): + """ + This is a helper for generating the test vectors. + + You can re-generate the test vectors by fixing the name of the test and + running it. Normally this test doesn't run because it ran once and we + captured its output. Other tests run against that output and we want them + to run against the results produced originally, not a possibly + ever-changing set of outputs. + """ + space = starmap( + # segment_size could be a parameter someday but it's not easy to vary + # using the Python implementation so it isn't one for now. + partial(vectors.Case, segment_size=parameters.SEGMENT_SIZE), + product( + parameters.ZFEC_PARAMS, + parameters.CONVERGENCE_SECRETS, + parameters.OBJECT_DESCRIPTIONS, + parameters.FORMATS, + ), + ) + iterresults = generate(reactor, request, alice, space) + + results = [] + async for result in iterresults: + # Accumulate the new result + results.append(result) + # Then rewrite the whole output file with the new accumulator value. + # This means that if we fail partway through, we will still have + # recorded partial results -- instead of losing them all. + vectors.save_capabilities(results) + +async def generate( + reactor, + request, + alice: TahoeProcess, + cases: Iterator[vectors.Case], +) -> AsyncGenerator[[vectors.Case, str], None]: + """ + Generate all of the test vectors using the given node. + + :param reactor: The reactor to use to restart the Tahoe-LAFS node when it + needs to be reconfigured. + + :param request: The pytest request object to use to arrange process + cleanup. + + :param format: The name of the encryption/data format to use. + + :param alice: The Tahoe-LAFS node to use to generate the test vectors. + + :param case: The inputs for which to generate a value. + + :return: The capability for the case. + """ + # Share placement doesn't affect the resulting capability. For maximum + # reliability of this generator, be happy if we can put shares anywhere + happy = 1 + for case in cases: + await reconfigure( + reactor, + request, + alice, + (happy, case.params.required, case.params.total), + case.convergence + ) + + # Give the format a chance to make an RSA key if it needs it. + case = evolve(case, fmt=case.fmt.customize()) + cap = upload(alice, case.fmt, case.data) + yield case, cap diff --git a/integration/test_web.py b/integration/test_web.py index 22f08da82..95a09a5f5 100644 --- a/integration/test_web.py +++ b/integration/test_web.py @@ -7,18 +7,9 @@ Most of the tests have cursory asserts and encode 'what the WebAPI did at the time of testing' -- not necessarily a cohesive idea of what the WebAPI *should* do in every situation. It's not clear the latter exists anywhere, however. - -Ported to Python 3. """ -from __future__ import unicode_literals -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations import time from urllib.parse import unquote as url_unquote, quote as url_quote @@ -32,6 +23,7 @@ import requests import html5lib from bs4 import BeautifulSoup +from pytest_twisted import ensureDeferred def test_index(alice): """ @@ -252,10 +244,18 @@ def test_status(alice): assert found_download, "Failed to find the file we downloaded in the status-page" -def test_directory_deep_check(alice): +@ensureDeferred +async def test_directory_deep_check(reactor, request, alice): """ use deep-check and confirm the result pages work """ + # Make sure the node is configured compatibly with expectations of this + # test. + happy = 3 + required = 2 + total = 4 + + await util.reconfigure(reactor, request, alice, (happy, required, total), convergence=None) # create a directory resp = requests.post( @@ -313,7 +313,7 @@ def test_directory_deep_check(alice): ) def check_repair_data(checkdata): - assert checkdata["healthy"] is True + assert checkdata["healthy"] assert checkdata["count-happiness"] == 4 assert checkdata["count-good-share-hosts"] == 4 assert checkdata["count-shares-good"] == 4 diff --git a/integration/util.py b/integration/util.py index ad9249e45..c7ed31a09 100644 --- a/integration/util.py +++ b/integration/util.py @@ -1,22 +1,19 @@ """ -Ported to Python 3. +General functionality useful for the implementation of integration tests. """ -from __future__ import unicode_literals -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations +from contextlib import contextmanager +from typing import Any +from typing_extensions import Literal +from tempfile import NamedTemporaryFile import sys import time import json from os import mkdir, environ from os.path import exists, join from io import StringIO, BytesIO -from functools import partial from subprocess import check_output from twisted.python.filepath import ( @@ -26,12 +23,23 @@ from twisted.internet.defer import Deferred, succeed from twisted.internet.protocol import ProcessProtocol from twisted.internet.error import ProcessExitedAlready, ProcessDone from twisted.internet.threads import deferToThread +from twisted.internet.interfaces import IProcessTransport, IReactorProcess +from attrs import frozen, evolve import requests +from cryptography.hazmat.primitives.asymmetric import rsa +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives.serialization import ( + Encoding, + PrivateFormat, + NoEncryption, +) + from paramiko.rsakey import RSAKey from boltons.funcutils import wraps +from allmydata.util import base32 from allmydata.util.configutil import ( get_config, set_config, @@ -142,9 +150,40 @@ class _MagicTextProtocol(ProcessProtocol): sys.stdout.write(data) -def _cleanup_tahoe_process(tahoe_transport, exited): +def _cleanup_process_async(transport: IProcessTransport, allow_missing: bool) -> None: """ - Terminate the given process with a kill signal (SIGKILL on POSIX, + If the given process transport seems to still be associated with a + running process, send a SIGTERM to that process. + + :param transport: The transport to use. + + :param allow_missing: If ``True`` then it is not an error for the + transport to have no associated process. Otherwise, an exception will + be raised in that case. + + :raise: ``ValueError`` if ``allow_missing`` is ``False`` and the transport + has no process. + """ + if transport.pid is None: + if allow_missing: + print("Process already cleaned up and that's okay.") + return + else: + raise ValueError("Process is not running") + print("signaling {} with TERM".format(transport.pid)) + try: + transport.signalProcess('TERM') + except ProcessExitedAlready: + # The transport object thought it still had a process but the real OS + # process has already exited. That's fine. We accomplished what we + # wanted to. We don't care about ``allow_missing`` here because + # there's no way we could have known the real OS process already + # exited. + pass + +def _cleanup_tahoe_process(tahoe_transport, exited, allow_missing=False): + """ + Terminate the given process with a kill signal (SIGTERM on POSIX, TerminateProcess on Windows). :param tahoe_transport: The `IProcessTransport` representing the process. @@ -153,14 +192,10 @@ def _cleanup_tahoe_process(tahoe_transport, exited): :return: After the process has exited. """ from twisted.internet import reactor - try: - print("signaling {} with TERM".format(tahoe_transport.pid)) - tahoe_transport.signalProcess('TERM') - print("signaled, blocking on exit") - block_with_timeout(exited, reactor) - print("exited, goodbye") - except ProcessExitedAlready: - pass + _cleanup_process_async(tahoe_transport, allow_missing=allow_missing) + print("signaled, blocking on exit") + block_with_timeout(exited, reactor) + print("exited, goodbye") def _tahoe_runner_optional_coverage(proto, reactor, request, other_args): @@ -207,8 +242,33 @@ class TahoeProcess(object): def kill(self): """Kill the process, block until it's done.""" + print(f"TahoeProcess.kill({self.transport.pid} / {self.node_dir})") _cleanup_tahoe_process(self.transport, self.transport.exited) + def kill_async(self): + """ + Kill the process, return a Deferred that fires when it's done. + """ + print(f"TahoeProcess.kill_async({self.transport.pid} / {self.node_dir})") + _cleanup_process_async(self.transport, allow_missing=False) + return self.transport.exited + + def restart_async(self, reactor: IReactorProcess, request: Any) -> Deferred: + """ + Stop and then re-start the associated process. + + :return: A Deferred that fires after the new process is ready to + handle requests. + """ + d = self.kill_async() + d.addCallback(lambda ignored: _run_node(reactor, self.node_dir, request, None, finalize=False)) + def got_new_process(proc): + # Grab the new transport since the one we had before is no longer + # valid after the stop/start cycle. + self._process_transport = proc.transport + d.addCallback(got_new_process) + return d + def __str__(self): return "".format(self._node_dir) @@ -237,19 +297,17 @@ def _run_node(reactor, node_dir, request, magic_text, finalize=True): ) transport.exited = protocol.exited + tahoe_process = TahoeProcess( + transport, + node_dir, + ) + if finalize: - request.addfinalizer(partial(_cleanup_tahoe_process, transport, protocol.exited)) + request.addfinalizer(tahoe_process.kill) - # XXX abusing the Deferred; should use .when_magic_seen() pattern - - def got_proto(proto): - transport._protocol = proto - return TahoeProcess( - transport, - node_dir, - ) - protocol.magic_seen.addCallback(got_proto) - return protocol.magic_seen + d = protocol.magic_seen + d.addCallback(lambda ignored: tahoe_process) + return d def _create_node(reactor, request, temp_dir, introducer_furl, flog_gatherer, name, web_port, @@ -300,6 +358,14 @@ def _create_node(reactor, request, temp_dir, introducer_furl, flog_gatherer, nam u'log_gatherer.furl', flog_gatherer, ) + force_foolscap = request.config.getoption("force_foolscap") + assert force_foolscap in (True, False) + set_config( + config, + 'storage', + 'force_foolscap', + str(force_foolscap), + ) write_config(FilePath(config_path), config) created_d.addCallback(created) @@ -572,3 +638,158 @@ def run_in_thread(f): def test(*args, **kwargs): return deferToThread(lambda: f(*args, **kwargs)) return test + +@frozen +class CHK: + """ + Represent the CHK encoding sufficiently to run a ``tahoe put`` command + using it. + """ + kind = "chk" + max_shares = 256 + + def customize(self) -> CHK: + # Nothing to do. + return self + + @classmethod + def load(cls, params: None) -> CHK: + assert params is None + return cls() + + def to_json(self) -> None: + return None + + @contextmanager + def to_argv(self) -> None: + yield [] + +@frozen +class SSK: + """ + Represent the SSK encodings (SDMF and MDMF) sufficiently to run a + ``tahoe put`` command using one of them. + """ + kind = "ssk" + + # SDMF and MDMF encode share counts (N and k) into the share itself as an + # unsigned byte. They could have encoded (share count - 1) to fit the + # full range supported by ZFEC into the unsigned byte - but they don't. + # So 256 is inaccessible to those formats and we set the upper bound at + # 255. + max_shares = 255 + + name: Literal["sdmf", "mdmf"] + key: None | bytes + + @classmethod + def load(cls, params: dict) -> SSK: + assert params.keys() == {"format", "mutable", "key"} + return cls(params["format"], params["key"].encode("ascii")) + + def customize(self) -> SSK: + """ + Return an SSK with a newly generated random RSA key. + """ + return evolve(self, key=generate_rsa_key()) + + def to_json(self) -> dict[str, str]: + return { + "format": self.name, + "mutable": None, + "key": self.key.decode("ascii"), + } + + @contextmanager + def to_argv(self) -> None: + with NamedTemporaryFile() as f: + f.write(self.key) + f.flush() + yield [f"--format={self.name}", "--mutable", f"--private-key-path={f.name}"] + + +def upload(alice: TahoeProcess, fmt: CHK | SSK, data: bytes) -> str: + """ + Upload the given data to the given node. + + :param alice: The node to upload to. + + :param fmt: The name of the format for the upload. CHK, SDMF, or MDMF. + + :param data: The data to upload. + + :return: The capability for the uploaded data. + """ + + with NamedTemporaryFile() as f: + f.write(data) + f.flush() + with fmt.to_argv() as fmt_argv: + argv = [alice, "put"] + fmt_argv + [f.name] + return cli(*argv).decode("utf-8").strip() + + +async def reconfigure(reactor, request, node: TahoeProcess, params: tuple[int, int, int], convergence: None | bytes) -> None: + """ + Reconfigure a Tahoe-LAFS node with different ZFEC parameters and + convergence secret. + + If the current configuration is different from the specified + configuration, the node will be restarted so it takes effect. + + :param reactor: A reactor to use to restart the process. + :param request: The pytest request object to use to arrange process + cleanup. + :param node: The Tahoe-LAFS node to reconfigure. + :param params: The ``happy``, ``needed``, and ``total`` ZFEC encoding + parameters. + :param convergence: If given, the convergence secret. If not given, the + existing convergence secret will be left alone. + + :return: ``None`` after the node configuration has been rewritten, the + node has been restarted, and the node is ready to provide service. + """ + happy, needed, total = params + config = node.get_config() + + changed = False + cur_happy = int(config.get_config("client", "shares.happy")) + cur_needed = int(config.get_config("client", "shares.needed")) + cur_total = int(config.get_config("client", "shares.total")) + + if (happy, needed, total) != (cur_happy, cur_needed, cur_total): + changed = True + config.set_config("client", "shares.happy", str(happy)) + config.set_config("client", "shares.needed", str(needed)) + config.set_config("client", "shares.total", str(total)) + + if convergence is not None: + cur_convergence = config.get_private_config("convergence").encode("ascii") + if base32.a2b(cur_convergence) != convergence: + changed = True + config.write_private_config("convergence", base32.b2a(convergence)) + + if changed: + # restart the node + print(f"Restarting {node.node_dir} for ZFEC reconfiguration") + await node.restart_async(reactor, request) + print("Restarted. Waiting for ready state.") + await_client_ready(node) + print("Ready.") + else: + print("Config unchanged, not restarting.") + + +def generate_rsa_key() -> bytes: + """ + Generate a 2048 bit RSA key suitable for use with SSKs. + """ + return rsa.generate_private_key( + public_exponent=65537, + key_size=2048, + backend=default_backend() + ).private_bytes( + encoding=Encoding.PEM, + format=PrivateFormat.TraditionalOpenSSL, + encryption_algorithm=NoEncryption(), + ) diff --git a/integration/vectors/__init__.py b/integration/vectors/__init__.py new file mode 100644 index 000000000..31c32d0aa --- /dev/null +++ b/integration/vectors/__init__.py @@ -0,0 +1,30 @@ +__all__ = [ + "DATA_PATH", + "CURRENT_VERSION", + "MAX_SHARES", + + "Case", + "Sample", + "SeedParam", + "encode_bytes", + "save_capabilities", + + "capabilities", +] + +from .vectors import ( + DATA_PATH, + CURRENT_VERSION, + + Case, + Sample, + SeedParam, + encode_bytes, + save_capabilities, + + capabilities, +) + +from .parameters import ( + MAX_SHARES, +) diff --git a/integration/vectors/model.py b/integration/vectors/model.py new file mode 100644 index 000000000..8d9c1d006 --- /dev/null +++ b/integration/vectors/model.py @@ -0,0 +1,58 @@ +""" +Simple data type definitions useful in the definition/verification of test +vectors. +""" + +from __future__ import annotations + +from attrs import frozen + +# CHK have a max of 256 shares. SDMF / MDMF have a max of 255 shares! +# Represent max symbolically and resolve it when we know what format we're +# dealing with. +MAX_SHARES = "max" + +@frozen +class Sample: + """ + Some instructions for building a long byte string. + + :ivar seed: Some bytes to repeat some times to produce the string. + :ivar length: The length of the desired byte string. + """ + seed: bytes + length: int + +@frozen +class Param: + """ + Some ZFEC parameters. + """ + required: int + total: int + +@frozen +class SeedParam: + """ + Some ZFEC parameters, almost. + + :ivar required: The number of required shares. + + :ivar total: Either the number of total shares or the constant + ``MAX_SHARES`` to indicate that the total number of shares should be + the maximum number supported by the object format. + """ + required: int + total: int | str + + def realize(self, max_total: int) -> Param: + """ + Create a ``Param`` from this object's values, possibly + substituting the given real value for total if necessary. + + :param max_total: The value to use to replace ``MAX_SHARES`` if + necessary. + """ + if self.total == MAX_SHARES: + return Param(self.required, max_total) + return Param(self.required, self.total) diff --git a/integration/vectors/parameters.py b/integration/vectors/parameters.py new file mode 100644 index 000000000..e1fafcec4 --- /dev/null +++ b/integration/vectors/parameters.py @@ -0,0 +1,93 @@ +""" +Define input parameters for test vector generation. + +:ivar CONVERGENCE_SECRETS: Convergence secrets. + +:ivar SEGMENT_SIZE: The single segment size that the Python implementation + currently supports without a lot of refactoring. + +:ivar OBJECT_DESCRIPTIONS: Small objects with instructions which can be + expanded into a possibly large byte string. These are intended to be used + as plaintext inputs. + +:ivar ZFEC_PARAMS: Input parameters to ZFEC. + +:ivar FORMATS: Encoding/encryption formats. +""" + +from __future__ import annotations + +from hashlib import sha256 + +from .model import MAX_SHARES +from .vectors import Sample, SeedParam +from ..util import CHK, SSK + +def digest(bs: bytes) -> bytes: + """ + Digest bytes to bytes. + """ + return sha256(bs).digest() + + +def hexdigest(bs: bytes) -> str: + """ + Digest bytes to text. + """ + return sha256(bs).hexdigest() + +# Just a couple convergence secrets. The only thing we do with this value is +# feed it into a tagged hash. It certainly makes a difference to the output +# but the hash should destroy any structure in the input so it doesn't seem +# like there's a reason to test a lot of different values. +CONVERGENCE_SECRETS: list[bytes] = [ + b"aaaaaaaaaaaaaaaa", + digest(b"Hello world")[:16], +] + +SEGMENT_SIZE: int = 128 * 1024 + +# Exercise at least a handful of different sizes, trying to cover: +# +# 1. Some cases smaller than one "segment" (128k). +# This covers shrinking of some parameters to match data size. +# This includes one case of the smallest possible CHK. +# +# 2. Some cases right on the edges of integer segment multiples. +# Because boundaries are tricky. +# +# 4. Some cases that involve quite a few segments. +# This exercises merkle tree construction more thoroughly. +# +# See ``stretch`` for construction of the actual test data. +OBJECT_DESCRIPTIONS: list[Sample] = [ + # The smallest possible. 55 bytes and smaller are LIT. + Sample(b"a", 56), + Sample(b"a", 1024), + Sample(b"c", 4096), + Sample(digest(b"foo"), SEGMENT_SIZE - 1), + Sample(digest(b"bar"), SEGMENT_SIZE + 1), + Sample(digest(b"baz"), SEGMENT_SIZE * 16 - 1), + Sample(digest(b"quux"), SEGMENT_SIZE * 16 + 1), + Sample(digest(b"bazquux"), SEGMENT_SIZE * 32), + Sample(digest(b"foobar"), SEGMENT_SIZE * 64 - 1), + Sample(digest(b"barbaz"), SEGMENT_SIZE * 64 + 1), +] + +ZFEC_PARAMS: list[SeedParam] = [ + SeedParam(1, 1), + SeedParam(1, 3), + SeedParam(2, 3), + SeedParam(3, 10), + SeedParam(71, 255), + SeedParam(101, MAX_SHARES), +] + +FORMATS: list[CHK | SSK] = [ + CHK(), + + # These start out unaware of a key but various keys will be supplied + # during generation. + SSK(name="sdmf", key=None), + SSK(name="mdmf", key=None), +] diff --git a/integration/vectors/test_vectors.yaml b/integration/vectors/test_vectors.yaml new file mode 100755 index 000000000..718f94f0d --- /dev/null +++ b/integration/vectors/test_vectors.yaml @@ -0,0 +1,18002 @@ +vector: +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:yzxcoagbetwet65ltjpbqyli3m:6b7inuiha2xdtgqzd55i6aeggutnxzr6qfwpv2ep5xlln6pgef7a:1:1:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:fs6ul2fju2fvb2cfx7gt6ngycm:hncpinwszbggrurbvuaaexnftk3j5wfr7473pj2g734mo2isxlbq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA1I0X8E9USJxPRJmD6l3cjlyGYi9hXxJFb5km5/J7elPbYPP3 + + DhdHmJcELYP5HxGBmfLavCBvFDO6nVA3TDwCPrI/7KpiY7uHzZkLgsLA8M45NaJE + + eUgACBESZcNioUqYLNHvYKLOqTDV+JwyQ9oWUNONd2jg3LQ+e4oyVwvxEZ41P5cM + + u9wJI8OO/G7FItCL2Ts1OgjmNWEz6KN7MjU/2UsNfa2eK6mlZ3Wi1oprhmfCrWHu + + +hjevqW46Qp/ddCCkBQCHKcV5ZsbBVxq6vqrYClUYa6Y5jzevMK8euuT+tA289sx + + jXpbY3eXaggWdeDIoDquOumCCkVxhoj3dvUKsQIDAQABAoIBAAIAsFSN0sv6WQ7a + + 6XDIYJ8gxQ1gx+iW6fuStFikIsC00JDZy56g3oZUCfCJ2UuPJSr3rFLwdUt570yz + + KEo6GIVRtaN7uYCaED4CLqcVQa8jKkvUkxOXd5Sb4JH/5MqDQurNMZW2Av96G9ID + + Wr/j6qjpTWBuJww9UIdmdnH2hVd2oz12+6Y/6nlrE2iGPDkQMPnkKXRb7xeaXJOq + + l6003hA4JRtzzS1uBb7cRuvyW/oOouBBxoP49a8UUoetgOMNDvVX4/16lRY3K6Vj + + VfserJz2R7QYKcfCJAe54VImGGhvq0Q76kfKsbX0xZ5fGFgS8LyAaZYyR6M3V88+ + + qmUT2WkCgYEA1mI7uL+NEn3zRjjkpqqO1tmKfZVDayQ5bpOtJG44qpmv+eihBuu7 + + S7V2waf46SwZAdUyXYxj+u0Dfnwre53tx7jdrntKNP9o1i8b3pZW13wv/IWq2bcA + + UFAhSlFjw9qj9nVFYHnqhygKGq+EbzkILp2eQUstjoWM4xCo1bRMMN0CgYEA/c/K + + YwVm6nyK6jMAK5zGWstliTPYkkSU79BvdbwXayIVp8CeDYPWpZxtqVQtoNvQwA9C + + 8K2PuHrHFH3a16siXPrto0hoC3oXyyKKmqbeZLpafg1ngQfieVYS0A0qt6cVx+Sz + + 3gy7W7xeHfBSBbDPJR/G4gI88+9GVJdCVAfK2eUCgYB5ZaD56gZBfW7fyeG4ewZt + + pTwmBvrpVdbrxdYatguCl4qt0kw09hHWOkioOqzZpO34OrjNfm0zLzl2S2v4ESMP + + oKBvaENKJYNBHeYDMlC0rw8hSLPJmzYjRGzFf7cltc55Bkkl64Ohy0uFdvRgYwQ+ + + GWT/Bkoi1X9FKS7h7LnkRQKBgQDF/jZvEGO8P/NNxwM3AlFpuok2go9LatyURxDr + + 0xKhrDEgb43cFSB4iJKzKMt/VHp/mGgrv/kBfCWYwqTY4NMpnUWLvowLh+7Ps95T + + ziBmi0jUVDiN20y8Qnzid6L/KQRArxPxABWX9lWlHTee4NJ2r1dCL2TFFb7Tdjtz + + ubBwUQKBgQCnEaEgoZ2Rqp3P7TzQjSzPlHlHBMXW28sEdXprdlwicU18fjDj5+og + + iozu9orcAD8AOGBNueKErSWiXhp+MuY4AvJuJZPV3gkMKKYc83HKWN05Xh8rkcZ3 + + KIHCyp3EBdtI+YDWvLISSqvFqCYtBR5v7eU9Ri2gOVljtmgJ8lARAA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:tn2ekpkmearz7k3bivm3ikuz3i:wcqgst36kymoirczlkok5pqdekt5lgsyfw3oh7ecoro3rj5aiyya + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAxMTk4iBj9yi+NBdRamEGlVB+/Vptm6uWdSZIF5CmliQHr0Ev + + KlYaiMxlFR+1RiV3LA7tzUbeJtHUsiaefAxtZFf4gtCKNRj1vC8lhbcH7NKxY9vr + + 4QMhNJ4NxYpC8qqcnNrlwULMw+eYLb2NUhuI2NOPKDjs1dgwypIEej0/m/Z7r+NB + + xO6dKx4NYOnrQBoLNfgN7KlHCruhG4LcZxaMkuUD38brtxkd25/PlQ9tm77ODz9G + + WrU6/G5LSzTgWqrCQ6ww3UXfk9hfNqXob3loaTw2U+2M5gy73UduhHqSkyskNHgt + + WJRUyU9YC4K40IDtiJAlJJ3cShfVNDWCAIjKuQIDAQABAoIBAADRMS16j/UMpMQ8 + + 8o1xYLXJs0qkZP8iq8nJwmk3+bvMONdH+y+pqDY4Ob/oNU2uGybCMHJL9eE4ZDHn + + NNJJZOzn6/Qdye0lhjkQAw+2mQr+kauwqUlHxOFd5KsU2L6plGPsXsw6KvUx/DD4 + + cA1OvaHqOFZ6Qgrd+SSQ4wGKST4sZSwX5ZtMX2+o0eghkK1W5fMgbxSvMOWBOwqk + + uUnYeyFECxvntRhv0clYwvqfNetf4SMFcPVp+pCY7gaZH2rr3tVk3lSHWFI0pz4s + + lLVtINuK2jeg8cfhZhnlWHSVW8C/F3xryNZCnacq4UgeoYwje8swez4/gCi0PyYY + + MbufpP8CgYEA8qLO9guRyFd9S4jgmVmu1TQLN8nX8sDOfkmiT7+V3oDJm/3HNRXV + + nX9UD/n2bpydEvjMCF7Mh4FaQvSFqSLTSBDoAY+4KD4KTecz3JD5yugBWbT7hWpp + + 0jgUOW18w+2HFyLsEYFyW1xpIa1iZT9w/R031nGeH+q1CJcGfYRNXN8CgYEAz5tb + + wAShRkugicR3jO8geYzuDV0JOAsZnTdef0OLrTYoOL6V5TX1YNnSGsv8vTs0sF08 + + PGVQqEdZrYtgCJ3wehs30xBoE5+CZdAo8k810x18TYK7Zx5ZF8VjKT4LcW3SPD5I + + 7T0TUeOKZRWgF0V4uRMj2qH+4fX4fjkoSDkYM2cCgYBYaf0yaSrZLxBIGvuExcpQ + + hGNmE9Xt7lYQbLKJjs2Ew7czcXlKncc2WfR+0d37lnQiOqjWj/zFj9wdM88Uv8zv + + oMF5+C3p9Bl7I7mhMO7lAj+jubBBgHJJGQg9mOjy2DX2t1IAWwQZyIXCsNR/Amwg + + v6neKY6uIK+RDr9ds30hTwKBgC8Svv8PDbJuu3wBfEoMfoSRG/kTu19lxO0M/PRG + + UIl52izjqgFK9tR7D1TcI/aUUiIbQek/38YIR6E+FQxfI4PMYCAPfEnWxS5owKAQ + + rdesu96nYe7DxtfI/e8ADoAtspnOVaLVUmgi++JnwOEF85WjbWHJkY2SxEF6nFOj + + /oTJAoGAbhFazz1ZFuMJ8TwKo847lkC3TqWEvMzvoFgOLej6eqiZ93LtZG2+CG84 + + eBDDyAVnNaHUa/HrX62B3Si6WN/vxsI9x191kaRUkiBBaqTg6TkruQwdFHMlFFHH + + Vg7Pqd88N5H5gMl6+i4c/RgXw/vlzFkTgc3TwtUjwAWGQs8eAVw= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:mri732rh3meyh4drikau3a24ba:6tsj5wvcp6szdhmrbu5bea57wduoza64y6nd2lm7aleqpsxjm5la:1:1:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:kwn44kjzh5s6lqyaeh3d74ziye:fammlnqo37yrfilvn4xwralire36de7ogpusp2uprtirwlpdbtca + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAvXGjmoIhKgrA08l9upgUZdyMOgOrH2rayM6/7tuaNjWzXfBL + + 048vgjD+PyWUCat9+Y/ZXO7RybLSSJ0z3tK+7177gaBBPffwp1ltlVR0mFEnpzRE + + 0wOzhn8+DBcrOV6819f2TcL1PLjtX0RnbHoVpQaMhacwE9laXSGvvDEliPRSTZGF + + a2p4DmkoBaTILKT9ZYjUdYvWT0VjtpK0aj1kkBtAvJFfnfKw+SXEnuRb49QWlfZy + + wuQdAZKqpHv4lm8DNDXviU8mXqU1N67D2Nn+TIZhZIMIILlinFKvbQDgI74sLoMI + + PxnuSZELZkRF4SaV+oNIjOV1FUaPlhs7mVy98wIDAQABAoIBAAIVmYrDDBUizImR + + 2dFeEhLE1zf7k0X3OGWlhtxSs3aXYjTDd+0wb4HX+RQqU1+68LKCZjWx3NX4rKOi + + DBVw7bThJZTPsOMnWiTOdgJbYOn1WWZ+8wmte1z1Kvw3YLxfKqFdVnnP8LY0ohCX + + C1CT7NZFrxjlDnxdHYxWAceaTUpYms5+vw/XwNUtypjjqeU7yd5lZ8Oi3kRlxgDE + + tVJq96pzahruy7Xo+QOrqDd55zTzfm1lXA5ZQNMtSKOumSoJ9+/NTGkz9WYDOzUy + + jBJDzKYP2hE6moUdDOUqK0sWPFmcRvMcVgxlg9DRuNFWzqM12jTzEaFqnBpRUoJ7 + + KuNBBlECgYEAxUo+GfuPB4QuWy3TlvbheSOP8JN/wJm6YgsisncroYdIibR9r0BW + + dsaQmJEPKjsn86qIIT10AtNXlieRg8GTtW+1E3GPDpkJYnqcQZ5D/R2AJPNK7Acd + + JeOAjZOWVoD79D8sC6w98+akURaO7TrTwXEQpSIrl+k0aR/RQCThuycCgYEA9dGs + + AWA4RVU++eFyXiu3fc08V7Asgh2h991FUWckP3/kRM8P9wLBJkBvolbQ6OA+kpKy + + IatQ02fCw77ksathgv5X7dRwBq+ziBX4VSch/zZGXiQTxJdjDEDFvCOzmXmuTVgw + + ZXSXaQkTlOci+aknV4CHZ/uZl0IRa2gX5u6x1lUCgYBE+3+ZUCcjpqkawnxARdRy + + qeeTY8+AhX/w9hnMsvRzhzzqwUxM8b8JysYWQmo+Bu8iONdeYAFnV4RBgVZU7mN6 + + RjPXN5agsQvh/iMSoob9QspioRrqSlZ7v/9cAWXIm1L9hPUeo7wJwvRjUfLpqe8O + + rTz3sGnztNvZggGFXx/6cwKBgQDg2CT1qTYvLNcKpwz+WAxhVF2yc2FyrnodBtbF + + q4r7ThbUXXVj4bAcNeomWjSCHcL+PJIUu+eVRx5d/3idjn4F3HE/CAZkB0g23Kml + + 8cJl9xYMPAGc2z/s0D5NZXZ8llE5S8YQtsFbgMLZe0WBiRiEL/sqwHbvZK4cST07 + + rO8bdQKBgEvcv+EJfffxdmzgRaZQaxxLdvrFH63ArPa/CnTMsltQUHifZD8H5F/Z + + MaMXAN+tbbwcE3uId0UcwsSflJOCoHkI7fly08FYTUCzyWLcTrrntP256SU7bybf + + 1tD2fzeoHns+FePq5qSkmXyw9bKC4WaP7PYEHr8RZ9+z4tmmo1GU + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:uuln4c3nhnggvyge4trhl3d6pa:gzzewapuozilqyr7jo26dxv4hmip5nalhwsztkxxu3dcrew3k6wq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEApavd9AgytDZu/VS2b253N8/2MWMUJJsAV+dXcMl1lXlD0yN9 + + Ljxay3m+ZIc3jJPqj5nDhxFz1Yd9HI0pJP224jJjlVHif9SpXzH9FVAsGIizYDMd + + ozHIZVctpX2ZbcQUbsskiGGnWwrDCrBDruVq+XnPbbGUpTMSFsXAafuKlvBG/zu2 + + e9TyEYPeenCz2+9A/Y4wIcK9z+dbKoof58R3XyQO20v4oD1cb2ohQreE778iEYJj + + gQCjO/EiYz2ATiEOlPrdD+R4NjFxqzfh8SZWrIDyKho7bMavvBM0N7Fa20n5630r + + Czu6jZNVgqK5qS46otsQN9XCUB9F37IVZbIwYQIDAQABAoIBABzHki9QFETPlvDN + + nEKXyUCKER3LtSZVwdXDY6J9cL52WiSty9NyGyCxRbSPc8QpNuxavQdz7fAoUQDa + + ec0KARDiyX9ZQfRMZF7b33fqHTrm1mhOAOZGYeZO4mhW/QX/M8B6bB5//lNXt4Ge + + FKfnhTGQ6kqHOIgJKumHUVFn58+n5khCgM6TKTOc6A4wqSfvF8Mt0eAlj26rPwUx + + sil+5uj+KMf/Z2Hb0/KBONLmRY2/dIwjNa41sxQ/DnW0Dae4PSKU0IojV3qz6mVF + + upfeZEVcod3Kn5jbHvkL5VpP2tFkGz+v9RPEQ8Ipt53GzaWMvMzKJ+nKKhp77IYL + + TBGp9SUCgYEAtf+ri1c29XMhUENSTfSKfihxBdlABVfrVCeVb+5TnB9NyGxLdC1W + + bFX9kn1pURR3d/0MJvgr5oLt7pFO3FmJ6cAeBYMadoxu0mKZZldnh9m69+hZ73ih + + im9VXLzKvwzVO7lpC83UMgJXyGs1EVQQ/fpCDlq8wEGhH/zIlrq/IpUCgYEA6Qis + + xm5d9lmhhM7rGWXjzcWDI5Jla1SGe2bNDwTyXMFoG+W7ENXtO5bdgRRaiByrb0mh + + X+9r5PI241MkseQIHL8B1yEgsxExj7aebfujspeAeSA1IznaZOSFWOxG/L0xpYQZ + + G6dlk5YTv/d7nKpZ0AV7z1rvOER+KLhpWsIWT50CgYB8fTG90h5JrkKvQB1gLVE+ + + EjOdKIleHlFd8uWI9qBCPjdaTJkgEpL276rPNPGBAFrnvDM/xKlit1RAxywGFUj8 + + lujyJEdJp612QvNiyY6Loib9w/UglIcKxjTBhnG4VPLWM3DjHhtzSZ75/DsEa1hk + + IXZlkzNg3oNz+djLIVn0MQKBgGUfTZJCHGYlmPB/tgdsboFBn1mVUotTv5PXFU7a + + L63Og7XvZ9CzdGGyYuZ7hZmhD0eYpP1zcNeFwAm/b6H+OQL4Y/0NtBngcShS78b8 + + NpnuImLtdgGWPk4f2DmxNlDAbMXNX/PfHTYBHwrjgvGF/rlFV+ewJzS8jB5xf85R + + gMsFAoGAB1V5eES3Ud9t38YeEcc4zi7amA7oiLZgAlMStROTxBripUuw5aFvzila + + S09EunEasURmykYqdzUoMAsIBlwiFS1Ky1pliR/PDgkX2YVM+S15bisIrPu5DmGF + + bbYgYCgKvkxL0p7hRTeu0+czw29He/T0pNfvr6/+4nAL47oCju8= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:e5tpbcmalcq6nn2zhd3qvg4chy:emzsvv2xnkhhrj2oatds5hf2cney25awi56ybeq4ofiyehzyakua:1:1:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:s2ort62uw74mbnvhqxgtclusli:xm4pmnye4mht7hoh5vcpt2zknqdvogujdo2ygmj2fb3chllp2ecq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAughxLigyfdYXPUaFIYRop4H33/VxoWOha93f29U3uFfjeij4 + + GPTARKNbLaqvANxHkscAPvKSTCJdECqzdg05AowyX0dbDPrBDirDVb2FF3UJ43oL + + cFIrDSpAL/+Yr14mVfvPtxomdw/P3rRocY9PtiLbSLGF8u7eliBiUsITbpQUy8bw + + 2s25/uBlkWXaflolma67NyVS83tugO13PN1W0pBqRRhmoJtWm6Eg6CRJzP/PeKmO + + OhZ+ybKTGWl3Z8Wu6w5TmEDrp4zHRZ3SYyGXrRppGhHhVQY8awBVCQzDf8hoUt3b + + y4ITWSIS3DqiI3n3O7JaPFKMTeFknv7hmgWLhwIDAQABAoIBAC3RtXqeWO1IZTno + + 3BJox9P1/WSyUbXj0Za9M400A0DKmNL2M0EGSzK8n1DsmKTYHGLI08UtPp402oII + + WmIpmJCJkkCIVSMpwZHpM2ozPwwLfg+CeD3GZycbcGrCA8uxnzSPTFY3QSETCmo6 + + Of06RHJCPIs3ehve/ICyYjUq6tlRgKtLSWT/YcV/rF0HcLz2JOa2gmGHPlazLuYR + + 4xKm2xWzLAHTKI1JJi2C6eNla4yIKEuXtTK4qfSFCnL/L9UZuzR/jL6Eq4iRNcKW + + 07nRRWppySr3G7nesoFgNxDvqDB0QpE5oTuLbSSiZxe+55tvWHfgECeqedpyN7Vt + + b/CxNi0CgYEA7t4Ks+xEX+q8KIhEVsK3lncV1o1Rb/GLAmSqCqir5Aux9j6+WING + + emwlv9rGQBgRXxCMDaYD3eBXXFgKCIKcu0OgA4racaEZ9zySSpqChyRJKNOick8c + + WXsnsTv6yQtN5r9iT/QuTpDXawc0v6O3fwAj7U3itjZdeYuakfb84nUCgYEAx2BI + + cWxKvcRYGhn0ClwjLw0ZzLj2vZpwKbu+kJiCFVyxHWgqAo/HtYBDGDAKLi9Xbu2C + + 78Gdv1Xmgq7q9kLr91qH6hbIXr4fzC06R6kTjPmXwhtfKJcgagt8fNztKnf15wwF + + fK0rZQ1SBtp4iYM5yr1L5LdkwAImry/jtOAdfosCgYBa7+F3Of2V3pGfhLEvrpWi + + DNgdhFN6oKRhVt19jVVTTjiEHMLug5uzQ7TjY3CSOhdy76PCFm/mamAX4dSABOmS + + SV6DursLA2AVRdQT3trOhDvt9RQlHIUYc9BaoxEItOsFa9sLwVRXyMCaGHY2dyeG + + jBEhaMNkxzGy8jj4VOVVeQKBgGLsReVpCsiPU/tXZzuArcBZqrRmDZ7TstUyHwJV + + eS2qOQLTPQzaVAedJS0qINL7kFEsrWvSUDewIlgy+8fGOpgXJhqixTYk9Vf0FNeb + + b2TiLkcUF6nnGiEjo9e8MjyBGtRRpaNPtJlF+64E1gu8vX73X2GTEP0n1BPWGhAT + + pu6zAoGBALYVsjIE+zj8c91ybrbNGLZbTg2KKr8fO0/07C2CvWH6HHN+lpyRTF9A + + QTGHviaFWoSLjgjmty9o0BMlvUtB1NNb2t2D1pNX15fWVYh3ALeFO9T7iR762Pdn + + KjfScNMgtEqigVRUEclyOlV+bH5S3LsMK4D7ripJSRvcQfsJ3LO1 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:ftamrjwrnnk62rlturhbjwd7uu:b6qgy35eipo6kkzqem45uzxfl7prx25w7nevtqv76akv52y6fg5a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAmQmtP2klQmq9icuQMvprLk5aXgk2Nv5lPWs+6Qf9R9Tft3YB + + CboH0scSgfb1+dYfuH8FHhuKD341yVBj2uGqhYPZDiGodMoAnGp4ZElvFc4qLDvP + + Fv0jixXMKYykT0cxwvWlQjCu7bQwUABdh32ZugvGcg6Kl2ubE2HUPRfPNSOEQGx9 + + DGHOogph8DNL0dm9xha1FggJLqFN8BnGk0nIvxA58oXG3xV8hsBJF5UV0BZcurFw + + 98tohmKmAUObYCtUl67nQixFQHl2qUuxQo05EMwRUcjRsnH/ywUjzu1sgDs0Ee0k + + OlMKPtT6go6Z+1iw7MEeQ0IS+rrRZmvwFhUCJQIDAQABAoIBAAnheBAUsn/RSHTc + + ccOjgMa37wRh7+ApGKbt2l1NU2sPMXU05z2WMenH9J1I2/ofew4nFVDWUlmhunNJ + + qh4jB9F1q86fxF1AqugZGmDPOkmGysOZsPXjricivHsfm37gMomgi+T0I7cxNRVV + + O19YxVN1GIDws2iyB+HTz9I0oVTli+BIQAaEdOOO7cM1AJhiUilqXcmCXBxoAfoo + + yEfchETAU25JgsirfqK+7QIbpcVB+00U9PKp1AM2ievPtXa6pmnuKZcSMjyEB9cj + + sNMuc/A+DnkmqpHHLOXhQCDl/ETLtcnGxFhp6rTeN0TYf4cEEEi+fFcvRV4dPMqs + + ttF2PsECgYEA0brJPSqQUUyyKWbdLJ7LpvWx0w3j8SRb2mj5Wjzsv2rNCIrCnwZ3 + + E5ABYrvDGG2w8Mvs2Rx0v5jvvms4vB/QmxC/bjqOXaM7DY7+6oezVLhGgsg9sMN4 + + 1neTcCmBKdQTTjzvd3QzFm/j6MkRITL7E6gLIspqRHY4+kCmAQo1R6kCgYEAus0F + + cbqVoSYqM1M+GEI+8OAsTV4+xxVvx19FYgNjcRJ7aFfvTAPMtxOHxzLXcTWPS3rp + + vTBQz5XPXLw4iKC0mbVyLxqBjS7AtU22vGRWiXi1Y9THM/G7P4bHxiaGcoBvX+nu + + VzHCrDVVksT/2V8osreyaFp+tz3i1EoF5NTLRB0CgYACe7u2RbK/w7C4XMdxp8+x + + gmdAoIF6cXvE8klBkEcdXR5gY4Q6bdErIiFiEecVevcFYuTDDVs0iZMNJifd0mKd + + 82zQ2VCmOzCP0ImkLUcqUaREGCri1O2xXGkaguNMo343BvGu8GlKcri4IOlbA0eF + + zA+Vsd/gP6YdEHbmvEA1QQKBgQCkzJ+S+ENtylfMtBHCIR+aLounLhBAXx8gS2LQ + + 16BxbxbEtV9+NpPyqB5PlQEQ9WmX87YmnGuO1+H7NGrDztPGD5fPCplkzuxgh1FB + + 31uhKIcOrfeYUhkaMHQq0m4msjyP57fH4TSX7O2z8Gyvfw5OrVWOTtggHU7ybuPI + + QBub2QKBgDst8HtCy1kYdVFuDyG/CjReI6w3/NIeril7T3MixYGAC3zxfwFvq9aE + + BGMEWmoIg2Vq3NGLE1qHrwCrVvfiHQOJDC1XBiBzH2sijIHO9xnWwWLSsOspMXMj + + fX32WOapE8++CmasDj9ABJlSHbQkUn+iHT4ncBhce52sp3xE0kvf + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:ok3slnjd3e56za3iot74audhl4:2mjvrb455yldouoxwzbx4sbsysowipqje6ifa4pmbzqahj5j4mnq:1:1:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:gayk76ptouc275r3kxcb73gpxu:lsdwqdqlno2gkdldk6s4wlvbz6d7qviuotfg77t6fquhkx67go7a + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA2d5GQ9jkZXW0mqMtvm4qVD5nq5PR8Ni6DPhNk9+qpvtUTz6S + + 7QBFOkYz4Sbuzm7HYk40JWPDpTaBBUi2tB6sp/HUUQetqUeh4BSZz1VwB4pkcOrS + + vr4pLeZyos65U/lB2RMUwcDKEqtbDGMKZjBY2ElYUpQWsPsVB94KH0/nTVFRJFVF + + DrsuTdqwRSGoBXfKuL4MWWJQY7CUJ17ds6ixizAnRVAldHCWQvrqWIOaekLi2LAC + + OFP6w+g+fQKzNj64mH9Z4sOHLHevrU19hITv2HyjvhGVV+YACYWHXFEchiLr8p08 + + CAWktc8xobZrAzeqVBV405TJP6FooROpwidqCwIDAQABAoIBAGBGZXV45GDjdUY6 + + Yq36n7DvjL9YyJauJvUxSpLUbWRxvq1wANxDWNQqDqXpnvDRKkGKPmfhYKTi43vS + + yI3q2jAy4LhX9MlP0rwjTl69Kg7i/ISbeDp67NaQNcs1H9d4V71Vvb/q8kDywP7F + + y2Qh7DjTnHiNYUOfCImb+IwisptKyUeER4b4kqgREhwBkNm3O7EcdDn0OK0zBwTr + + Je8dnJ0tLRwszDUe+cSiAUY5fBM/UMq+Z5IJikk55FkLkvr+oam8Eq0s0oR4z4hm + + NHldRoFu20npfPM9SG7acViLWZIgD3YYXbF9LkBlk9X9ajNtSwE3QMtNHa8zko99 + + M7oKqEECgYEA+h94ts4x03c7cpetfvA+KM6O2NbWUmKo9ZQkO7q0orTo9FEB75nn + + NXZW//f6OZu3TZr+3yGA2F52rbtO97Rd8yIncR1ai6nd9THR9d9AGEmBZBM6tjvf + + dVypg702tUGLU8NvvmFkkyUh9PD1paES33dr7LgbTH2KXxcaDts3Y0ECgYEA3vzJ + + ORflPds+Px9Fb3vO6ZjAoLToGrhiR/gna8vm273Otl/WAXiDLHah+wCdlUgmGEm1 + + KkfckVuU2SGzfBY6YbQwEMAlZt1k0Z5DrYSydX6JWkJMqklJa7jZ+rGO/PsBatOo + + fLy+G+ysFfsqzPgbqEN6ZqvIQeNLNNgABU+11ksCgYBB+9VznFfGqpizNVJev3AW + + gc9rYtmtaDucdZVNcIbAuasO8OPq2pYFI4/1/Ow1EGA+B9qe8I62Bc2XLWe6rwlt + + 35+6Fn1RhOF6EseJ7nhRL+sDhJMjig38PxK1H1B0ZrMjyNYMylKnAs+/d2XGaQS6 + + kR2WmEcTWbcMOOL18lzdQQKBgQCD/sr2Wui+Juu/3bjydy1SJbPQ7YV/W6oBxClB + + rB9p7/9PAYfisv2i8k6MEB834M98DRWKg6NTAA0qQsLGLzo737ecEsGRFHi7hJ23 + + NxeUaWTQ4vIS0vL9Kx0NQtHLeqGqJMRVojw+t2heUqFRV4S3o8nuwLz4E53PGBVb + + D4Yp5QKBgQDxVnCHap5zYzzShVi00ygZcT+rBtldcrsj8Kjm4KE6qafB5M6R3gM3 + + bFbG9DSE4hnuP0aJMrLEfmuU7X/nxuzU1JRXIzgFXOS2hoT33LbZBkYZrk/m9AcP + + QYt8oUu1Ad3WLADavwwU2ZeQiHERomK8b5FyfhG0x4cu5zdWiel//g== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:ko4vxyhbyhfzkmucaou6leumvq:ysb7buuikg7nktiisrnm7je7nmdcqr5qxnfkzizhc565o4j2x5nq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAneiyaICnfRuLwEd0VV/xNw+mB0KBEIJvVhmfYK43vq6VLy2w + + qPOLPCx+bGv28IRU/0CKkFEN680Ww1Bdfv3DLUHisid3ISUMweEqQW3tKabOHgqZ + + ieOQIEFJ0dLFe6QnoMeiE+9bGdgtXi3bWzhV++1W+2uAdcjFGLpjHLozVstEGP7e + + +So1FQt02jTRp2GGgfOw6o4CKcwGuXmoud2dsl9j1dm2N9Ov7gJdz29I802wjmGI + + DZDSiWtgN90TU5480UENMqgMJ7jgLGQ3yJdQZDeDopQZ72RWpoXhuJWW7hy1lXwa + + vga1vaxpy2XLfVS3fVsQycWAKs87g50Z35HoMQIDAQABAoIBAEiAzmHTKJP18N3R + + MSX+DlgUtEvDClWVPh+PVjFi7K99o3vtA58fa7+uQkHv9IsMh6ZHcRfAT58EJL57 + + COLFCzedd8QLANTUGR5wDyHJokosj5kVjtfUB5n3wDg6CXiyr4tP/igfD3o3WuVS + + MtSYckpg+D4qZuoty+mFsvo+uFHR++gzkeS51+wvk+Psh5kVkTJ9eWD7WdNJbHP3 + + QKtrSWN5zqJYkSI6Jn7Ur1olKzFpT6QkIwHIAmyY9brwBkILdvPBtSTVRLX3sJaT + + XaX5zd3jlmGgvzBovGJc64jlSJWl5lhb0vA09wq6tVUTqlch0yBWsnIHxrZbT2bm + + /J3pRk0CgYEA0LlCapyHjXUD5GJ6wzXiY2EqzTCNhDaJHTpWrLCAa6jkZ2h4du9l + + /u6uiVZSj7lIxy1UD/Skuiz5xWe0j+Oo2P5XnbzAA3mr5lEicqbo0+oP59mxfWJO + + KQ7iiIikcf7s3V8+H07Tvgwc6XAQ9rSAWFxU/0zmSDskTRSFWcxT878CgYEAwaz4 + + 0IwB7NELsJiqEyjotGkeVxw7bN7F6/XjIU+TuMouyH768KqnatYBPvAPXSUNZtX0 + + 2Nqp/WvOGrL6wh7GCX0zj/Ro6OkoVwmDQlNPhsyl+h9yvTXO/SZOhUzlBoU/PkZE + + 1ATL2H/Eo43iE/9EkREZX6ydQwdlHuQaHGiBYA8CgYEAryY3EKWnrlG6YWUuZS+L + + eR+pviP3LTJiXw98ek9mhHFmsUvegtejvIjoF8FDaO3vn4xvFTCTJtPlCP1cbL57 + + CxRry6b/bisk0BHXmWRszp+El2d7ZJ8gvZ2LBU28yRhGBgINbFJGpx0dCdsLsSqI + + 5R0eClqqh4Rxkukced1XuZsCgYBGy4eYE9WQT0nKn8NrhYSqjdI9XWCLh1Mp0ZPY + + 1VHWNnGrcF8iIf9YmimSbAXxsl2XvZXmvudsbz/DmrD2zHDvfwieEmVW3gOU7TFB + + yVpEmAID0AMNDuI+vwXszBLbs1FO3jjCl4478VhbwL1nOeRCctGnm11Q5x8bj53L + + zJeeGQKBgF82eley8ZEdCutxK1pAuP1FrLf2Xf3k43+sf4XviiONEZqn0GMUUAR5 + + 1L6QOK6DolBs/8eQh0qWAM4Jzp1ab7k/ju0I4rXZtWPH1KChdGSh3GlF17KgWxTZ + + Fp7IgXxx2lqs9WCffy7BHqa26oASZlG83r9bbVgXVtgDyi1QhEQb + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:worle55uksa2uqqeebm4yxnihu:vta76jbmejt2pxx4prqa75xawpdtx42cmzzhappeetzjksym37wq:1:1:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:p2jakp7rmlimr7kdcyv7pmqk24:scsdwkdc7jmwgvz5cpttafschwome2dv444rkq4ra72wwth65tra + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA6MkCkLlqIfmB8wLFgZ7c4ValETX48Zf4zJWOAFisLzvSOUJO + + lPHTSZYLA6zqMqZWYrvrIncrm1VkqXkQ00lKJih1GPXGXfTHZub8ZU6dUHySe59I + + r1QBOdwZSLczBVAx6B2LegL14IC4XW6cgq7aJrm1NVCAgTVaE7TgeKBgZtCOfj1D + + 28IvBHxp0et6hJXMtNle5nbpg9VcHWWPcc/rbZeK+tTZkH8WAZXkyCJsDYjidr/A + + hSGdgZVyoxdCB3lRBAdZKaojxbDMCKbT852KzlkAbvQTk9XaANbxaVknsNCzSfRi + + 0hIyFgRGV8D6pYzvPFTFAzLvBHNO4M2oxXDzewIDAQABAoIBAER4o72IHFTD/FpL + + jWbUIKpTfxgx5PjDN9aNgwhNDNCT6wEWpOCgxQJXFQROv1CIps5B8ibgIL5+/q3u + + w2kynJHewprF6ERItMJq3QC7gABls/yS3KFdt0KaoAFIicRdU2CwGA+agVI46oHp + + ADZcUiSj6U42UKYw2D8FrCUvH0v+Kt6I8W4iIeuy6P2TFmp5/M/AdzVxz9tZPeHY + + s74aKp9yBnQJfoJCgLt7RF8gBeGLPyJVPesf5gt5GKHHPryujWOEnOZkesHl6uyW + + iHI+x9k7yrypYwQVIH1wxklUFMzqmKF2qyFcgLF9TIAsDZT+0qJhc80nWeeIQ4Yr + + Z3lL6AkCgYEA8oqywuSnDHkVJHxhH33XF4+VsjtHnPjh2K1yPTBBiEzOdD2WyVgL + + ZmXXQmh4/fbc+ioHUK3GKyoqW7XK7wSLwnBDLZ5qGybKquvDFQy+3+jOYfz5Ux/v + + m/efDP6gAyLRc08hfEnnPf9u3scgW1J1klN/jk1YYW48GzRqnYvpQ5cCgYEA9bO4 + + MAx6vMt7ZO8tNZGs/Pe5KfDaDNlyzMTKAzBpr0thHtbY3KhBtpE9eWZBvTeNIORE + + hmmZjiiGRcEQWDfbxiPeTLsUdbK+YmrkBi3PFrsMzcvDsmVsFag0MNQ95uiaDGmW + + xhMzprSQQIPpOlDQo17x19e+EQjVbuWSZF1T+70CgYAPS6nsWokiYzxvGZzyZHg9 + + FyQEonJottVfWcjbjQCE/PsEH6IzvmaxpXiGypnewkO7Tw05DEx0CmuzbuqGWk4K + + DBRgex4L6k1brBSYbj5XVpI1YcPDdz8gIeSY6DHlILv+vp3I/cwkf8hZKkujFrct + + bDCeI8iQFGib+plCqEEkrwKBgQCQYjwqgCrgJvMsLSD0CdcOEMTO0KpSQrYjfsD3 + + fsucJz+7T6XAhV+YWWE2pdCb0LkuSvW5xvRlhYriEsH4FVsg5JMNpCIxyAf47bdx + + qhm30dOEW+l0PAV39JA24YI+3xEnmiTv4PjJTfI2901m53azimez3yPh/r7tnBqa + + v/1KQQKBgQDUdKGfCOGGLV8Mzk41foCzT31r72bO6niNyqlGrx0gn9GHMN5/+4oF + + BJExrdUPi5w6FsbmYXqVUPfmKQER6QBitALbH1ASMCg+scoYZq5ic4J1gU7RWB1r + + F1J+puZLYmg2Yfcy6l8mHjEez3jNCzkZ72xFRmo++UB5VGkYXcYqJA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:rn2dx65oniewqh2lzqfcosqr4y:op6fupeh5cchglxtz2qmxukfvpkltcciv4emt65j56irkloppijq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEArrgsDZFLXR+LmZPnzNSaqgxy6pv8euDq8iTLTUmF2HWiBc97 + + MH2Tl1V41pSVY5a2bOoRN38LPs2Z0bP6dKDgaKNayV8ykWvhzlJpRMLP+K7XYATB + + qyVE7n34TytxWdHM+gHmlf4laTbQ56Ts8yZ1w4eINMaa/0OAFgbXBJZTElrtYlAA + + 3ljAU6HDDPVoOsXtOsNXTsZbMssadi/5ESEn/EzQw3muAvDxLV6adEXk4/1HiY2j + + 9EFLXUbKFWpfEdw13Goj385ok7/iLNR3ExCNbc6RefNeZYIY4uJGkWAKV68HyJUW + + HCag1gn0uoiEfc/1ichkvnJUytj0iUmK8q186wIDAQABAoIBAERJOv56gOf+gkMd + + 6YTGu0Qm5WsIWB92dJz7AHJOf/9fyllXBCCpk9ubzkSfgduQdfAPc3crMivzk2DA + + ZOzcS5jZ74uwp0Tq0zAeSYJUWZAqVYbzlPXc9Rn5JelbY0vlkaVMxOBumhSLFg7T + + CMDnkTNAb12hGccWjKMPPU5PqlwLgrUkwqEYrnNAXUXg6YTNaulW3BYi/gKcqyJ8 + + zinOFLL3gcQ5wR3qX41YLe1fwGPplC9TFuB9xyoJSMN0PJkhEGm4GAFdL6mjJGwW + + 1HHmEfSeHkvkAlzrDRVR/7e0xSL/nekJPY8wORLQT+fRfF+bhSCVeB5BKOFBIkIC + + PVdGNTECgYEAt8vEqMi6f+rm+atxOEScOpPyFoU6RDYIgmM/hGjiXp/UCX743fIj + + pujXFMbx9jv4LnnEjsd2wcx4SsncA/x9Uezk70+Y+RzpqzqiG7YNDDIQU6QJHh4p + + Bs4v6XOIdhzeWHaNav5ydb361Sm6Ppk0wxfT49gnxC2PBPd97/10++cCgYEA81uU + + 9gocgdBignouVx99rL9OaQ4orsSvG3NY30C4LNYabDM3qMpYdZY6NjR6J1lDZyFD + + X7LKlK5yKOUfQYs1qFIFelm/IT0ey1pEa/JtRLg23c7bGMqAh27WLHxyC86BwkiV + + Z6srKR/rwWVV6rtersvMzFdREetn7J6ksW4y9l0CgYEArlEfwukmIR5cVJ2qszA3 + + cENTDtLq8TjCF1AkNOP5Fr/Frf/z7ySxdaNOIpGRePVlrEanCrfZRXM0/9G1zz4Q + + abwhYWt/7Xzjjhf9GgUvGMr+uyVP1HXMeXzi6io+Wa+FnidKdxi+3DcECFocHzTV + + Wtdliqo/BQwkohRNKGmeIy8CgYAoNCoQ16zL+Ww82AiN1iMCBfzjODaaYN347/5v + + q5aBucFVvMRmOz+P9YiaaeMAWyvaftFNnxD+rS8o+GlIf8IWk65Z/zenOxy6Rahm + + GP/aSYCu9jyWBOZk+Xeik9CXiL9BJJKiNNIFkkN1iNM/20KSKBMmcwpupnBd0/ur + + YGRE9QKBgQC2bvTY+NYnwB5fVkyswl/Luy2B20Z2RCBWXazFfVQCFGQ+s5cMEUsU + + rYVRM93RDxod6fMgXRPKYs6phgByLVi1bMRqJvFTx9/9/dtkjRlX0S8WETLHEyhY + + VHf/xJdGHph+8wBa8qt7vVoyX44ylAVWgXvmf2PTL6qvLKu6OLbUmg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:6kccrgbtmmprqe4jcfi7vf6v74:wpivl2evi25yfl4tzbbj6vp6nzk4vxl6lbongkac7vl3escvopsa:1:1:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:k2opn2p3sjpp66iipfj5x7ylka:dcrrkpbqjs4vv4r6hrfnftza47zkhsrfbmkavwx5gadbphm4gyoq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAwoi+YH41KOcNqUaRWqZGXqPyG8Zs6a8fjTu0NzfiiPPXiBhe + + fCd5fHKHYXTr6W/YCqE4c1E9i2JDNtFULRrnLyjRwhnvaeWizeNN6A86aupuNN1c + + Kt0XxDPDEgR8kxCh//kIgOALQs/QxRK8WMr+NfsV5xWLDXzPrfftKWvTmRaGRuPd + + iuvVzFfpfFyQXHRZoSr5uxTIEiEjJWTEvWv7Qxam0mQp0FeGGhcPu8g2zDbrG5uq + + 3VEn4X6AtFwQOFkvQV9E8oFtFm9mtI3G8Zx0dVQw3OMM4/2vIrloQ2PwzymEPvx8 + + Vnec7pY5AtWTssnihLLn9ZJCpcVr78gtlTAvJQIDAQABAoIBAEUSlLZiWbHKSJmA + + SwAq5fWYtNCT5fwbiFJ3jofEuhTyr+bM8E+ZHJPJfrRl9ZYPdmBf2lFn2ThyjXcb + + YI4bbVbbYY9P8ihhtyrvuKvbLFzmHHd82csGcffigTMWkL0PPNZMsG5CHv18GJ7B + + Bkto2FaGbsJ8bcE+PeeBjp4UgS9rp1QLnFu5CFVEv9gju+MUDNWxWptBfLxlKAaZ + + Wu1yGuDa3nWY/JhP7vd/Gtum5aDqsPmI+8JCma5EjXgdJkG94bBBFPgKdkOClh+L + + 5PSnN53RwuQwbKdFq1Py3CNz3WcrB2jq+W8EaM4NQX2fSp1SRoVECuk7NqxuM5FD + + q7oH9MkCgYEA078uAEnM2YovbquX602S4vnoZTtfLhqFrisrJwZfaEj9HK6mRJAi + + xsWMK9a3ZmI9v4PnWzYiNjWr9SJ3RP1AmaCuIjncjI1iN+sJfGsGXBLYtVzRuuvy + + hPkSN+kIcM1bJ6vALz1XMPiNnJEbtQOyFLNYuITqFE1oKG8UTZK/+6sCgYEA6zCo + + ao/w462g+cK2kBSrB7J6tJJpGTs+jrN+W3p8le/OKpPI9e+8nwlnJ3TVThhAkeFN + + rUhIRQeG0LHVrIyodzJXLPZNMYbzr5EaGeTdjoFQl3GvfMoN/xX7D87F5SQ8QhWp + + oMvKEEVwtdj5vaEcjurefCCFrpokc/r1FGxGMG8CgYBTxnrjwE8c7nAvwBIeFZX8 + + 2VUZ4DCbJAEp1IiBKyNKNj52P58m10P7EqOPoKb1Cf9WK1C4pKVKf1emZ9l6YRxS + + 6+CZR/07WqC2cPZS1GEywn4c2zlbVAiilYygtEETqBvdiTVDO2ioxl34yOyGZIzr + + Zb2/W07lc263OKN2wY3VewKBgQCNq2i3j+8l5m/iIvT/g0Omxk79uHfQeAxtvxdt + + GTI0yxfgM9dItdlj3zEg5lKa0ScL+LBmofTOiAMgcQ7p+mx8KHm0nsTPAaCGcBxN + + 3rvK3IBkSVnRDJEzx9TMp9wy9AnMMOpV7ovQE1QaZhHBtWvTdwz/rkN4cmdk6ZV5 + + cOMyxwKBgQC/EScZHM1YPWvUatfF9oQrzsYBYTXk14RQNvuW6MAAK8C3E2REnypm + + iZDeMOyYzxmJ6r3sT0YIOmRdsaSWof7Rt7x9aeMmG69KDJL0jUsUhE7aK7W2H2yB + + Ax8MWdGte4MuzMRXpjZh6R3P1ZZ7xI9/O8SeKVnZB5u8G8zxvY1XUQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:2wd77rwew4gfhioljcisf6jr3y:4nzqf6vq7w3f5pw5yv5reh4isfsxmjpkd5dvc3swrcwm7zz7m24a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEArEKiDSb3JVVLiePghhefdt0bfKlhe0LHgxxnpBjkRK9SNScI + + iwNB+PdJZHJcUSCrGv1l4dpEEhXpykuhb9ckeySFYh93rtS2c9Z3pKYJ74SzkTIh + + T3x2B99H8uIeKEtbs+3wt4N5gwedYIfhxfhIC+AZcMD+BF7JyAermj9p81kqfRgv + + n00kRQpozitb8Vs0upKX+T7n2F+1JDrisJjTT3yDxnzwQ9fCGXa7rBOb80tNbrqV + + M+LpObdZ9Z6TKZbTKoVK5KFz5zSCiIx5usnTJ7MeFKzZQbPArsH+YkcAaSA0ctjH + + yIIeTXuCA+oyO1ep1YLRZ8YDqW3/GBSQ1sbqLwIDAQABAoIBAAEOKXL+LZ5vbtaJ + + 7Fq181allSEG4p+AMbu2ZVYmhuN61XyY4B8F5pYRYcQ5RSKEGjhAnCqtjSQ1OSjx + + nKwUO9d7SkvnGHMcP3/nLPV3xPDQNc9qaLTVdN2oewbcZsXlbErmZsahChII7mhk + + fLgbRMm51j4QGJ5LPF462czInawNebeJxMfuX1ycZsCd5b/hCxhhn82CnA1LeGWQ + + dl+87lyCJvTb9gTfKxzKI6X94N46zYz86f6KgaMDPazZz1cbuRhMJsRpqFWltYEM + + UneIEKEIm/56RtLnlAKZOIAI5AJGpDoMWYzxzlD3PwXyFfP6PigB0SDl/nAGA2Gt + + wdoSzC0CgYEA2ajpn6JHoRnYfgi1gXvkWnU6jZMfYNeGO8kjSvTRok240eVMiMR2 + + l9dOe7qRglNuksW6gCv5XlF4RtFJnugf98PQ7Hq0yGvbdkA9P4+jnwuJZ13G6lyy + + 75cFDXpx34SMSfWMnZvHO7cQuPe6bTSj16LGFiWWVIWjSpJo6++zwOUCgYEAypp8 + + yO1NYBxcuVhVa6hJR6s4ri3AKkrMR+tIFyClBBgSdkGFSK4f0fnyaU3xxWQjAZFu + + ZlrNDj4VMQ0RkIWl6RjCWt2yzv5ZRS88Ft/kG9FpI18N6QpdpKqPSgILTCThYj0r + + Q89pbHTnIEcYj77Yt5P9XMFPq02WKbhFm3JMEYMCgYAgaHQQnrsHk6+WZHmSA/5m + + MZo8RjGf27dS44nruTQVdHkWV4vjuUznItm+tnK/8ug91k8EkoeYsYy1Dqhljq5j + + 17Yd389XICgXHU2BT0PPhIo6582cS50g612HOjoGS9gPkw4S0YUCsSk+QTRy2imj + + C8tutL4Da7p6ef5BUvlyuQKBgQChJoBa0WXaLLUUN8658wFWoDpVUM6o1RXnnp2Y + + x755oywMI9GAHf/xZH4MhJLqDtxJQwQtJcw0p+zzNxHhgmyVG7x7yhuPyX/4J7oD + + 99HYzphyKglGc5hIgeG3XCjgR/V9zmm7Zh7UxaeRZPuEWqjGXFAKlzhnaS8nwAqd + + uiwHQQKBgQDCqKXQa8ivL9IDscqW1UNK3HPf3JU9GNy1OkcIhz9HotoooXB4ZASS + + iV6B4tKev2scNA4KKU5KvY0a893ghsH9yEDeN5MJP/cGCceh9+IhYMbDqmRmIv3W + + 1uWtjpmyRGk/rFBDf6jxWcXKEVXAvXq8IQS8AJ3JaatJzwuasiIDJg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:ofgig3loex6pev2eymmvohv7wq:yasbfedqnueaajdcavuba7kxbdqzn7e6zx3y6cbvucgx433vlzcq:1:1:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:eojgidosziluemkir3zkxtkwjq:yvdxyopvbqryaeslumwlc7x2xuw2y2wcqenys4rws5xslaox5nra + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAo/r4ebWzsWZmdDKCYXv+1Fh1/0xyPWR8do4BgQjDG5vsJFX7 + + gLwo+/v5JuvE3k+aTMDp/VNFtgvSd4t8WT1QTYJvVQakqcIL6mZVVg7ZBc8JCvHm + + D3wtc2my4nqN1VLw2iUduLmFHY9SPMxRVHafVWNaD8MAhDpEhA2Daz442uG73/70 + + 6x2LeOqscoTK7/NREfUbeTK9Xz5mFMnyGSWppM22+mDf9/3nCTTbfq8WLafMcLW/ + + 4X74uJMRE4uYzUzwiC0HyDZnsNAuU4ggjzljTryCK6emynSNHGAX1dkBccvd2Q0w + + g2nNL5rbsonjbaYHZ6BLWRUGbh0PMm9vZcL0CQIDAQABAoIBAAJMkyYKtgalWcek + + iycwgL/LrzjZgqsJcQTNBCih3bFyB9cxFO4GxVjWHTXOXbPjwBU2Kbm1bI9rPkPS + + kvdh2JHDo8m4hn/CUp4yWd0zZ1fRYa4zes8qBa2d9GYAQ6OTboDSfyaPRFZoI2Yq + + k7PYV27QLiu1J1lTQ1FqKpbq+Atak+OEn6n/y+1aEztaF7G8o37W+RDJUUhgv4+P + + SrOVXVbP72XCW39JPUBUPu5Zb4kqmWPZwh32nFZhWgv4dsjC4y97G7fluLhBu1F9 + + rDaX9OC+jQkgOq0znYAYWpaQQXqTJcluCOuk0RZHbT0ZOLdCxUl2Ar0CCZmDLXJH + + +3++gJECgYEAyMrvmQRbCZBJ2934mksJ+i9sYWBoh0E8yPFp7f7MFZM1x+PLGINW + + Q3qKLjzpFThlAHVCu5cHcWnnqCbceE4aaDUjJSTEn8MTDsvTleF138ARl5iZUCGw + + EA3qk95XyLz8QzOAY29i3SGdoCF5w+RciNDMq6eDfvOgtpUakHG63XkCgYEA0RDy + + eRXjpZAr6whs1Z+zDUU8zLDeh7Fpp1xSDElqR/79del8LkoRQNf5e75qRXcw4YSn + + cAxGewQ68d80KGi43j1vT3cyyM4qdA74AslMR8avtr14DZ2B4ZucgOPxEXh+Sn4J + + y6uXA88FezhW56WRo5QhwDcUwWD8cdbq2sffdxECgYEAuDxkTc2OTp8i9eec5M23 + + cOS0mECiiIAWavX/0Uz6K02wiiF8R5iyvSWhxj1DTKI7Iol1WrSAMtMOqN5HaueX + + GUiwX7N16nVOdkQVdy+xPUV5ntR4z+qpJoHuXBEmEN0+xdZqllIsr2PZwoUUueY9 + + 9ZdIRLRmVkTqkL0M674+zFkCgYBInxdrAjSCdVMcIGAV0JSUvoFBJQsXnYPy07nY + + dMQLYELQ65rsRWQ63wrVdi5aFO4Q2FCFNm5hGvYSwJLQmpfk8vgwZVppsFvE1tJF + + vYDWyeiNlMEYEadlI/W4O/WoOO+9lox2iBM8CnR/+fEOJFAzvyf+KeP2zGbEcIBC + + IP250QKBgQCwFmCfg4/EBvU9lQZJkGZOdEig5Y5+pqOSZLkOYxTb8b1pbDF3hfZP + + CjfKpC+u6dUVLC/glR+W0csPsAPVSftm0cHNIHVLaHExeeS6cFPJ37Tz4TsOWoxp + + z6hEblbGV9C0pyhAgu1dAJAPRBpzzIZax5K6EPIGqFhEkLUUL9VocA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:axafhf5i3oi43qvlbi5crtcn5y:6y23ckrgvhzeudwqh7tl4lx3th2wogx64c7oxzu6q7mbai3wfuwq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAqaKZBqNMZdBBYFHtrwyneRRmT+bj/ZMXJXupA5LgTIkFAgeu + + lOCUknGhdmteXd5KJFpCY+/YUYdo2I61BL1EzfnCGTMyQUy76jsNGVUTewV9yFb7 + + ji34ulQ+va8O32F5b9e9zBFJ/9YEvzlEXUh5Ui54LYcJBSK81Pi4YBuwfMhjcAGF + + YRSGOV6yFNu+yVZ4X3M5BG9dEdSS9D+RWvSQvvf4it50MUUZhB42ZuxYceEQQ3VD + + /yzbeAA7VYkA4x9Ogi1vjaoM81edSpzeEL53y9uq31sJAa2TWJ7+UuvUuOHjHZa8 + + wBo0k/ggvMU5gKYf7Uk1omcLu5bjawUuqLQwmwIDAQABAoIBABJt59Igy5wEFBYy + + 0G/EIC23WaY0n3BdGpan6KTKwDOQb0rZKs5h18JRNgl3gLkR/VwVskDJPecdnvZo + + CqKJLYBzMfMq7LrLa173K2UlKQikgBXT3WCE/hDANlDFRAhgvqC3/5a8Ch4RUlK0 + + FglMZmHXSpcnpIM6UumQW/eVCoeD0GzG4RcUm0VAPbNXDqekyVZdc/AYO7FUVW7r + + ATcye36CT6AqiAP7OCOyk9LqIxJluHHqvci12Ab05gBsfR6ihwNkGH0zYDVuIRV8 + + 6OBxpPsHO6fdp5TzxKEhh5Mu61dMjhjOYE7gp8BiQSTaPtvHxcAZiNuAb6L3TtYS + + dIiqDAECgYEA3WkNFq4ADXjJ+3ClmYwiv+AX/8apD/YOwcozcZlUUmlzywJ4dVrM + + kFpo7BA6iJWeFuow99T/IgyPT935D2miFPW4uTG7JxNdFdL+QAykSggiSs3CH+UO + + TGIPJf4qFZYZjlhfzpyjfiJkL5qdT1wDabPMhVN1eC5RWHplIuzv3WECgYEAxCLh + + hlwB+mlMsnxYlzD/Vbk3L4y5y+bYjuPY61OdRTOnVknnI7WQQwSBPqK0eR4aUIRM + + XLlLCX+vvBpG+I2i/YGzkOtTqk3qwyqapipEjfTCVuWKjGXZnID7r1ESVslUgXMT + + gqjk7aId9FRfAhaXJrJSXwM/agJhF2cWLB/qs3sCgYAFtMRilj9oGXnTIhcSevsW + + SNc1f1AyGhxNQEHNJq92pEMYs0qZc6qb+ciEdPKdPIXjf0udx35/ySUUYNsfW5CS + + y7ZkB3UUT7pxaouk6O5+/fCsTts26TdSHqDXUNKS1dh4w6xMbdsE0CwW0fxF5FAu + + NDUMJpd7bm4oQpdCrCqOYQKBgQC6mfD0km6zXiFBInpqhYw3c3pke798lYjtESsc + + YLWc1BLdTnxghenVSODpxYRsQs6IUgYQpZ0VUWzRSjLBYId0JkS/mJRFz9GNkugF + + NOt6HyYR5FrXTkMl2bUaS8hl1y/V5LToN2VuDDHxdZ/abcGqaDdj+8QGSHM0/7eh + + jVAPJwKBgGbuMV/ccKzDXzlYhj9ek20gBfq/kdeSRY/BK1oIWhF0wb4G/S0BQSGQ + + AJs6tBozgrN1zxI1PkJ+J0u9KNtUhBUV9KCVSXv9IxzOtEOacFXmIvJL7hDYKMwe + + 52PBFl9+WDE20km3OYtlFmezu7EvBNxEnEAAXZ5VO/0pxiRCLoq2 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:gsxbfakyyvqrv4sqvzftmoq5sy:4hinuje6rhm4myffxq6xwaocimd57c6hfutcbqql7pgd3rdhdnta:1:1:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:pnpjd2iuvxpslyhy7xzlbnl76q:5wjat7x422zdadbomr45uwbsurpj6ezasplybg6b2zkl3avs2sfq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEAmx/L+VzqYjeGT9QCeDb6DlBzSwGM5dZ8hkR+1JeURf5GCdfo + + URGstMbQQWl9RvHNywFYBoxXWD2Xzk/OVAl9cTKtagDGT8MfR0X0AfXQ7CfzZeV5 + + 3ThNsF0X2qd1DamOiSIGm+RP8NaqginLYVqNozMk47iN2CkSnl8r3XpatrIvBDiW + + iY2o2wWkfYCcDAbSb0jVY23y94t6JApqPSKNQ4UA7BI+0oWt3TI7ucA379drHOO3 + + 7d4G3kVwWxO9zCi/4kV4Q90QkBosqTdC2rBR/Y83FMaM2hT1a0iypnz+0wGGHkD8 + + PQ5gmHS2fwmN68vOWk6j6nv0GGB9WukH0Q9ZJwIDAQABAoIBAATz1phHKM3VRfrQ + + eE+25EmGtKzwB2aNxXtSk9YHt4Ul4WiOYG1jf2cPczX+FIYqUXlUuVG5iKRZkGTW + + 1BiHa7OB0bAxBs55xUrfkd2/fQRny3PfsqynD9vnQkwJzUk6tkFB49d1n5O/LBcX + + FyuBhO9xQjvpotBZkgLvuOp2Qzp9QxIP8RMecu/NRtJD8XzWpkeEI1cKGnPl8oNV + + H8Tw7X6YhicYI15REqQvw/KQMmgK9egOGGtAgSZu6Le/PCfDMsWWTXhP9gnjqY2N + + duRcUvoGvu/kaIM2bmp++4DnZgp9mumcAwwbVwYNzA73NrmCsswDk+ZBULRd3yCW + + R9Hrr+kCgYEA2DBW333pWiEzv5lzjmMQD20zZrbrF9trBTxByf80OCLWaSEOPvXr + + zbP8zFAAWOgJFckFsgygHfA5yIcLPLaa0TiWtelXNDNVVbgEVo/MAWKOmuujKh6O + + 3/GKEbln935UnrECDg5G8GY36fyyoNWjezfug6olZ/goiIJQOsNSCOMCgYEAt7C5 + + fETBtLILfHVu7IeLkUW72Q6foTzJVTkRx5cfGPLB1TgohqMqDTICURIL783ZGz/i + + Cxk042QRD7S3j3C+moLjXQMceSdWgY4sdy7OX2hscmbNSET42qyYFoUN+tLc8FUH + + jBVIVwZ1JfohDD0DdZdMMXuHp/BElGr1+6Uble0CgYEAiJPJXjoSgRE2uxW7rjmh + + PM21Sm/HB/RjoRQXUAC9QbWolRQABwCf7v2FeKIWBhTZIH017u0Q/rj0GF5QWBPY + + rNK+S8BVijHf+F5fxzvjGwDjrLWvB/30L0BOBLKIHxAdb3/OF4kngdph+p3dT8SI + + GmEUevOz3AInwU3qV6VrnxcCgYEAsNfM2xx+uG2orTuJfOHJtiRCgueXOu2AjzGQ + + Mm0FHUmo3pNgQK6Y73czz8TmBQpSd+96uWCdEEXoPwymo8vRVIOqTIOQR/tdRwEP + + Qfan7CZmMYVTIL52LmB3U0bpfI7A8geKaoyaxl2LLvKuGlArImx0iDb7FO01uQV4 + + p7n+4skCgYEAh9u+E2U4YtqeaSaL0K1TUlNPCrS+iKDbikC3WXv/anEDAik8R9Yq + + PO5kQ2AeNwcuIeCwY6F9h2TAIS0HzZTITW1AcVmoVKekqkGPsxzNV5zofZR/BTZY + + OpNYpBwJmxFwHPNnN2hcco1QVRN663FvaptxS/kgtUwFB2+hLp3Tbn4= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:ihnqgpid4zygk7utpua7n7beqi:2qppzsf7y4hdbo5fmo3ns66mvshiti3govobsriwysvy4w6dovvq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAyGaEmDD0/hTK7WAWTEfXO3Vkgq3vi3UYydqC1610aQ32QOnL + + GVtwlXPM1KyC7nm+MmBUx/f6nhOCLmK3Q0+4uVf6D/58u9I1f7K1hsuvZtuzoP/m + + 5OV2jEBm1R30hZUFZ468b4KuS65WNH+LaW7ylNziALdIuLNmz7WPta/UPpjOQfWj + + vq/XXLenVsHngzL6azBUr8U11vS5ombDLWZec+5Z5WEXPJTZ0ywW4o0VcVAK9D6W + + a+K32XanLNVpCpBhVTNQ4Lk7q1O7OobYoLYJBhdiFIW8jMTknoYQicHjTxmfLTz3 + + zWlCfbBC58KHogd3qVMV3JDRbYOG7I1/vD65+wIDAQABAoIBAATvcWiGHCJ9xJmf + + +iyawFQ4iecl/XZDxf6CoSJKpUlJDL2AhH31YIpttaevL/JLkUGQWcYq90MZW+Vk + + jPrdZcE6x2/JZq0BekvQzOOq9IDl/ECEzNzqQccmduHcwP7hMqbgPwfIAh7fBkR4 + + t6g7EUJVRkOaP/I8iNWotQdWczWvZoMrEgSjIi9OR2yeosrZB9EihCUml18NH2JC + + 8MDBcKmkSfFSfwYoLPwH+EoVwhotBzNl/dofMGCeG1DzObKXZSC0Fi3nXILVX/Lp + + 2wWaWehN7HggHr2SggQm/4jA6RoFAlP/qqeD8CBpJn1eryeXRd+A6qsIvK1C/miT + + aJPVr3ECgYEA0IGp73f4g/sb7kIYQmylo8cTy9LqA5tK/SwIHyc3nYtqRMkcG9Zj + + gLpGSvZABbPiwprawwQcxXz9TwMCY6PjUEfhevvo5K/ObQmB4p2cSWflNJayhqh9 + + TYzUgpIypjVlMmhQDRIX9X1hwOxmEt8ueIlDGNlaLb6sFKHhNWeqIIcCgYEA9gwt + + smtU2xVmoXas6Q5VFZV3X/5dfhs6Uko5XVTS2cwhzxDHn54mstbDfEqCU1G1ZDJ/ + + 3EUH2aX+RZjEU3eiAiB6TNq8SfIFqDzJpnmGUR6y2RofhjLA1cZZu6/L2fqZZ9nc + + 875lV7tENrebLu2a59g+l9NoLBbxgtsKAX0ku+0CgYEAhxCHWTU4yZ3fUO6FsnmY + + rsflnfHpXx64a9mbBTstPqOx2g8AY1P0Ls37fNGZVVhaer8/GHbQgGlf2U/Uu2DN + + fhKiED2gdosfx+gRuA9qzu47Pl6kFLCOQq8IdfBoWNxbylRiDqV62a43pXY9BNqH + + ytL3oOAjF2DdLZxTO3oEbX8CgYB3fD6M0Jaqtd/bNViO7QjgrG8GTO52GR7fa3Ak + + JNcoMXuRpOJsX08HtkfEiiJz99AQ0n1JKLTBO10ZyzA8IHKqeb8qp2acuk2I/8wl + + bgqORkwwJgF9GBSRO/vDq4FhX9MznZcxPxrT2fssX0mbJoP9ZwQuktmZ36J1G43m + + XzGBmQKBgEeliDU1sEpkXMYUaBs2mzCEe3u7DqDNOaXjvT9mJQioUNoMFMdd1JPG + + oVJGuGKJAOAWbfeniw7wraIXfSp73jlxWULKKs7kbvMWFXcJ3OclOyKtFs0RycUd + + bTkmeb5G6hZBu3y3HjYYW2MX5E+2TRPHAWm9CvnYaTbcGW8BsyBT + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:scwepfpkvhuc3fc5jkpmrodsfi:wui2ixaxyac76mbxtr6diw2ajky75wehk57f2kqgytddnpo4rozq:1:1:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:n7a2ymjpmh6yzczjz5dzttejpm:zx5xl74ellbif73polmylwfapy4ptr26vu67x7ecwqrhf34ldqda + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA7Qad4gnk7mpesxcpiKQfXW7+ybDNH7rdWoHlMsXSaE6r85/4 + + 5cZkBSptDFJ9+H65qlyiuUVOo2gnX30Hd2jRv9Uq/vVwgcGTlG9yTeqtLwNK6fRt + + Z5wIYWdver+rACxUrmg1uwYFcD9fqzkTtRoFTNwUmjBZKDAkJA0OU+HN8ehZ/9FV + + UJdscqxIbC6MDDwTckVMOvpNq2Cc9maInHw8On5VwEOsOaDGYK+TaxsYjmwhxWl1 + + TF17Io6wdauHSLP6ZYjv2KibGZhiiyb1NBKD9GnSuHji7oQyAWKaXGGKTU4F04jx + + JdtwhYBysZWHUf7FQKsVIjGiyE/8/f04FBlX5wIDAQABAoIBAGK1QTXbkfuZz6M8 + + b58IXkl+Slv7JYljvAAPnUAGMwgeTyyvf6tM8eVW1D/v8Kb2O2LPnjKSwtt5KgBx + + pJTdUZBWeUfhNb/LuiZ0PQFmzEWKVP3WPWOLDtBlj37qaA+z5nYVTt76dHRY6AH5 + + zJO8aN2nv2qw3MhIOBzNVRyoqiflorQQ7su4pXe6IrvHzmzS43zgahJby4SSmt7W + + OebkYXMsQ2Gv6jc0aJj11CcpCvutO3B85OE/GEZlywWyNKo4sMD8O9x40ByVnT2m + + IydpZOSF/z7P0RZOCKyZdDoEZ+hipc9taog8Drdu1eq+L9tAF3W7McIlLFv+Jqrz + + PrdVuaECgYEA+zG8iWbfT3DdyE/59t4OX3MJMj3SYDTQ4h1ePLc84zbuCy0Z5ajh + + mCnFSPdel+d38bUFHwh5BkFV12qMwXTqMeRIn1s6EDuccujxINETPN77Dl7FRF7k + + EE2xNfJ5Io2L42Izzy3YJVJiQqBnXjMdD1X+Z8hKbQcdjmxOZTu1accCgYEA8Y98 + + 9ODKRCocZ8BfFyHs7D7eY0Q7r/vp8iqE4xHXZGLyDDozphwmMl77Y6a1mjEEzsrx + + 6ckl0LVvq1ESt1wKoGBMxIMlrv1tkfHvgrhu6MeBe2QSDCUWfd823VujytEESyj1 + + xwBelqRcTXoZC62FlGA+uMXOGs84RPWDfeQdoOECgYADxn6X7hTjI8YhkZonLLU4 + + mAkGWUmFKqYND/Xvoa1nmNbBEj92ZTBm0hHmA9nHHLJ/zoGyMrVm86pvn2lYKwKu + + F0lEI+HehpbWX0voe1v3qT5Ku//pBCgXWqOUNP2/GDOHCl3O+lhqTy+s4q5LCyef + + qGI3exorQ1UdY+FVwiz61wKBgQDHJ5XODsa0DEP/Bgtf9whufia7kLXlEbx/e66z + + xzHeAfWtPw72FJ8pSEXakseGqINeOtPX+47B09SNWfokUi4wqzSfj8Cx1R9RBDaD + + f6txH4sRQB/hA3LXtAB33+XagRkZHlwEBbn2WOwAtHmRty46dl8/11VlpRKvR/tw + + /3GuAQKBgBz8ER+tjIMqlVSwLRtgJ+Hi4B/7I94HdOhpEuXynkPxYkOUSKGxSysg + + i572W0X5fIFK6m/ubzdtfYx828y7p8LM/BofvQpy5q8mNL7tOzbnsR6A2O0k3Amb + + t0H49VVOSMlHAYNFWL0CQE98M3bWZctIHIFo7xyGzHpypCQUfI23 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:jqzeglflgihje5znycp4axh43e:cju77h6dvd5w3oarj5m543ff5ou4vlrsipfmd7ntfkleq37tltma + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA9+tyPYSnh4G/0SdL+ZxbCU+UCQn3ZduTfDstJbGfNGdlZLgd + + F5mSDgO0Ius38nmOmMAx07abuUkvdVkDNN5RZKfOolLZlDl+eDh/XBb55AaSV8I/ + + 6asiblwxGA+xOS31pvnhupLSXYKI1xM2Pc+wLbQEgS3MJIazJAakNySCrNJ8Yp8A + + MTAHLDdMYJa4kdvQJeJN0GBFRNLdbdQ6VCqnn1rK+ky0khEskH5QkNZV8pjGFAIJ + + 0RMcbysG18eZwvLsyCzhtsST2f3v8/3B9N1Dm49Sf2OV9DvwMxGRamO36f5etPt2 + + xrrg+lTnWKzEoqlINSrQ1tYNOZMGHVoA15BTnQIDAQABAoIBAE+LfDKP0v7P2x88 + + +AwFJlJ09X728yl7y7Ty+bfb50R1nls0FaWCURHtD0ma5e8HIIETPYl70DgharhA + + kJ5QbJYan1qGsaf00Ia7PeXqu0/16dN9kGslTR1SuC/LrSW3ANgL2ei2fgehv80e + + LWukrRbk6QMXkiXwEB9RgDPvI3xWRQQT79Yf35VwUoj2ldG5bDRiwciA2NeNbNNc + + KUdKtN1acgqZMvv94uN7HeBMYKyttlfUM9+EMoTDhGJzGNN1vLcB7R7nUwiCJume + + 3/4nm9+pOJt2ETl1pFY/G+CSAUeIrJU47y664UTfHhydt0YI5Xaco+3burj/9xxE + + qieUK9MCgYEA+Kon6r3VpPd+vkhylgqk3vNleuxB/lZmmXMH/oR8WdU3bQh65q3W + + YcZlRh2Jq4iwChz16aDSelWB/mjDXotPLK2cSvJZL+W2c7tzCF/RT4XiphkELmAB + + l2Pj9W9FEZVbxHBZHRuaeQQsJHGhM6MtnX9TCdSpX0Apd2YbKx71mX8CgYEA/zuq + + I4R8dSVNkliH4it6ABhX3z0t8pTQqhDVd2G+ubQ1QjweJ+VA/xxyQF9XoqCd5Bqd + + XY7BpXRtVVQTEyZ3ecAQTeed4pVlDuJXuwMqAxSVb2EAZ4rLVf4DpfSuSvREqZjb + + fhrW3zbRzhBQF5QL/WferHruii83JDKuAF8iyOMCgYEAkBhCI1Q4Lm1A49ElnW6z + + lYKjxrSLlW/J6pfvBP0O9huJD8S/O1d3CJen7haFxYHiySl5ExYfgcZ1GtDojava + + iIBeNkvzhL7vmGcCRNMJfrSN30RV2O3HXkwDOCFve736PH4CFcz+GaxiTAgQqtSf + + RUoX+3VhZJHQtaDUk4tQNM8CgYB7GtITU4GcFyP1JFJWGlY72YH4oM+ao4CJppjv + + feu6MltF2S1KXN8erR/GQLZKMGI3dUbVq1dncGKTt3uDzxftV2AF02NpuFkH9tAN + + 2ZbX6YOyNv0089LjZSNpVj0C1hKQIrQrfNKK0ywa0e9vj+7AiOr0Ek8fw2o7QV5/ + + u2NRtQKBgQCdjdTxZw1n5jDO62w92iJVi/Q0g+KoUEpeeEXAXmctiDNaCNspsETb + + qqIo2ZmoLA/yptOPa0vfEYg1yTpQJIf8ZY0AjeBHRTw9ECUFeqdakQdV6IX1dEFd + + r3OSCPSREX24x6CQyUhZMAtMn8D9mAVMlUt1Iq6HtXA3EzViTS0PSw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:5eeprb6lfxclwt7fieskd2euly:ffjgjbrxfl6d2ug2a63iaesxtrqa5pk3yaagfcldqvo7x4ok7ykq:1:1:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:n6eoyebsflmwvubrh2crtnxxxy:layy5tfeichjjxoeg6jehn6lkxtcxpke4udpakwpmotutsdxajja + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAm5KsR6Jp8mLWjw6HtwEMd5rnzsyCivFl0kRnZoC31r38+JeR + + iYgM22iJ2rzYVOjZlSBtq/3ts0wZxx5HkFpqNaermhD1XcpPWBX094SvaiCxiRFT + + I6o76DZ8xaDgpbg6qOle7+zIGyR83ARl7s8gNCdHNWS1/eAJ7VYtWukyvAMdOpUu + + i6Mjqy2xgaEeEHBdHQq136NwZDaQiz52EodJE/Fi+hatP9XluKwkv/UXwE3lIcBi + + sEr1/FeG8CwRAk39NKk0qf97vAPvfrzPOQ6WFFV/MBS0To7KsCXBY4Ve2zNVBsOf + + YL4u/52a26X1yH5SO2oblE/cyFCGWiatd3IjWQIDAQABAoIBADmRRdTgIapCrriT + + HN84MR/VH3Ajty6o8w+ipkyE1wJMnV5z37Pvtyo9fb2GYdrRqyoGrO6W8S2GvIc1 + + CjA9dM3T9Kj3G4SQR1oGDfbFj4+K94cL9SLebHqaJwOOa3KHQJWefbX0fXulvdpA + + emOrG3SREEWOtdVy4NmFKRVZ858kSCXGbOZOl8wuaTfzBQCBSgWBM+P90ERMKRgL + + Lw25mqpXBVBuIsS2/EHucMaH8F5V/2k2jC1w0bJQ0rIjM8vITCQuLCl1zb3sHjYh + + alCQyKR/DjhE3NnY5PRedDu+OikqsEMvFxEXIlUWbAgPybe0BgWF25z4VWMROanW + + uEZ8Ev0CgYEAxBmqfy7Q/wRbOdlsFcSBNkDtXHIjJYtS9OvYwJcOj3Yusnw2qMSC + + LZ2teRvbRlbrI+zIpXWCVgiB7iaw2AK/WGohtkmf0oMgl5QR+lxqqwzwze8rKWiT + + gtnEtGNBPLxuPmEt43thL64nK9beN/vdlVEwEsZcpjRgf50bMEXY91cCgYEAyxfq + + sD3X9WTE9jOnJWpzA94z0ccVsUYD5+vSXRBhwtUcPet3KPc9M/PS3XTShaV9QOzI + + z/z8wsFLyN8JzoyOZteIAd6Cx5MKQJ3KO0+F6jv0xyIeaDaqcVzsycw6vT2ITQtq + + 33VGVB1GaXYCNwMBhUx8VjyMcbW4xGGPa4fsfM8CgYEAqZhk6v+rQpIa74oJPz4m + + XayDW8teeC7pfOaoG8/IiOw18KkagJUK3Lace7xKxKeRTw2ObgKVySAsdrHBid++ + + apHHPCaqcV50hoNJlRPuMKbNb9zjoDlQMf9ybmvU1NlGIu7ax/1BjQH54KFAqHxM + + I8IGaIZjRF7SAiv2gqY1wZsCgYAw6cm0OLDSgTqOsVIISOL6g4GnfHNVBq/aI4m+ + + sDtbWUg8AYHpc+JhqM+YVpJ9baYFBQI4VY3qufMupckO3ftN+YrgKF8HAfruJRKX + + xkdSaq5BZ447Oy9Brke5Ml7TRQaWx7EtsGkHySU0MR/HcAnluM4ZVuvcVw/w/C42 + + j739MQKBgQCFbLq7w8IGar1IXBuG9hCvVFUE0zx9ij7u5u40I8F6yW5Rt9QYNiWC + + ctNwMCkvbhiDTvYvd6titc0U4hplRmTpCeQDf5B9gHKQlA9wlk5sfJ5cN7AZsc+0 + + Zl9LnyoMqX/Mug+HcTEMnwQDHQugAkto7jQLYDZezXIX0ppxLp/zlQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:7sj3wkjglezcfjwsbnjanxlouu:3p7qxclmuc5vz7vbnivohlfwcvwd6kvnnikbdx2afkf3kfxripea + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAoDSGK++imql5vyeH632kPLk9l4Tzb4tj71be7xXT475INrFo + + tUFmxce6eT9TKQQx06OAdiUfOeaOMPuRL6+qxijFnQ9dkLmpBhOdqW98lOQtr+hf + + t8zMEFkC7PYThOpmc25zeRI6U78PLlpOXY1A8dKgy2JvGqqXlKu1ffULBhyzZay7 + + VxWsArjl3b84vfGyAUeAZkaqHff6rlPrsR54muud18tWBMTfwpBFxUvnD4PI4bLn + + FHR23SlqCdWZ9A7s/M6z6zVgfmqOaRmsHqXjdq5yXKBYhlrF0MrBIi6V3s9kKUZV + + OJGC4GC3j36l4mxplcE1onK6o8sLcjAwbPoHVQIDAQABAoIBAAxohQvaH6oC/l8D + + 3M8siA/7+P1HWuOE1FSxUcsK0cKN9mHmE8oWKrOe6J6DfRlsLb/KpiSAc460gMbi + + dThQTtXSSpwDmKeg+apy0n9RF0Eg+zjosqE1x4hsnIFl/dUJoq3GHEOAWewqnC5m + + 6DLuwdz5B2M5WImkNOFa+0+qLxRl/UPLytzQ2+z/zdHAPaS2spC0MFO2J5z1H3rm + + N7gaVtGPDqDnFyqpN7zuDyOD9+7sXKgV4CL50g7+b9EwKwsjWNaQeePKWlbyNL90 + + 6AkWT59cahVhqzprl2k5GWURkxi3QryfBjGJcBPv7ZkJceuhgrhNg88Hga7fxLCb + + GiksSPECgYEAv5rT+9s9B96Xd0h29pJ99sNgLaus5yhGlwcIeDFCUk8jvMbzGum0 + + n2BCZ+4aT8BBYYx/qMdosZPMISmznMJkOEPPlCP4wHlpG6C9QGZR+uGiw8ZyzBf2 + + /s8CFXtRvlRY3e0TQDMHgKcFGxWn7MGa6K8CR4EGxdbXFmjRzEyBIXMCgYEA1gwn + + sYiRy5ZTUdvI/r4YYedsNrFlv5M1tFiIccS/wnFpDg3vBfYgeI8zO/iGWNP8OLWz + + 8C/lyuTgRQ++HoPahJ0XTywXZg51qZIC4GxbieKCbiSdRztpIb77+waJUN53j4VX + + DOyK75hfxS1uE3NbK0ZbEQDGf6zN2fxEOlqmYhcCgYAEIA4+VusKd1VlgQ7moiLK + + JEy2zwJq+6gBampZRB48bW3Ei7gCNVPpNoZXfH3eh7Igqoi5Fon/gMIdWKuATYMg + + 3vziIKAjbLnBmYVZlJphP2hktKoWENIFjGlsEvqgkWpUZN1MPY0EzRPEEIRMCaMP + + LW1sIrAFpGl/FwSlVGRXVwKBgQCtiDU2DU6GC12JY/JT9LG3zfNBdBjVc/d6OryD + + 38rHTUKqjklWP/CbTR1wZVAl+9bj8wvqkipuj5fy5YxxGNyz3tfi7BAcQWTLEQEc + + CT09UFIGEdEgyt206i1HmkkBMxsjVCr641rQXGxoYyh2xHMJZoS2CDblk6dgLtDx + + rkRuCQKBgQCHK+Dq/DQmCi0yYiWz4gEYmgTPgCDOOEstKD0YbfFjvMesitgQYXd4 + + uWHcTMZcycOwlWXZR709Snrhnvy4xuKMlYK5/lHFtnK9n+Tzs4KtsDRXuIkIHJNh + + JYyzXjQUwhLbMHY+JSa3kNVOjMkP8Rq+po8xC/6thsDaGJ0CoIQzYw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:tkjwggbz6p4wvuipe3gtmgfmsu:cnbcggp4scaxcde6vtfzga7bsuja4qjfbtv23xhaofwhbw5exjrq:1:1:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:jlpnxcvtg3ohti5c224dtqsfi4:g3exm5bx4ctu3iuew3ir633j4dieg4p4fygpvpb33cvll6jqj5ka + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAznrHSzm1uPCplwOOjhgL+PvikNBWyjaPdZEGGBqWLIpr7gsD + + ek/I01cdgJzAd3p2oJpVj+Dew6Wr2LCTlGFWaPLFiCaSlibE7BJHqhQwEDazq24f + + eAPbkxFT9Y6KC7bB5Vg4uROUdKqadhdN8aXOC2QqrosdT4IMzMn0Vxe/GrwanCY8 + + fzCrcp6DqAH2SEjlavcSlCelKgt9C9cHVN3XAAFEsVKAlDnSKE6CVE3UTMTKmqOH + + l84nGMspHD4BUV8juSsseKYz+Y7LElcdslZiPsfiEDcE9Tv28zWFlFG0iV36NIg/ + + XzFutNOioIOhDhWpzUSOENUuMXZG3cDINbAEcwIDAQABAoIBAGVOklfTYdjyo5LH + + mPsYy08Hbxt0TRD8AhlB5YaQDNyfseLinns1iChBVuVSg5Bbkrar4o0sXMALmixA + + PriPpZDqhIaPvl5TeU0GjwjgzNA3tqHG70O4SNR4rQQPQqYKrkmzpmkQNUekqRKF + + zqVgn56xL8vhz6jB+zvDXtIYgZhAjtB5gyI8NEZzzWfD1VNLwGP6Hpi2Y7LvPPxM + + tjCkGN/D1ejbyiAHA23EjAAIeLF3xjzSViZv6i98lGE+hFe//EPDs/h1C+Sso2YW + + u6R9IIPW6hwGw7+wcmb4djEB6IkmrXwMDzRdPqbCLaN2DEeWk6iDBkgbggcqxxVQ + + uque8OECgYEA8AEj9fQCkzJ4R3g2Agj3eD37J+44cs8XEeslh8lZTFHezvQE+5BY + + I0GAX6qsetKJYV8d/SooIyIaDy+LULaxBiipw5WQIAclHhFSTiZ9zskALzm3qUaF + + vJPzpljTCPskVDtXEdkRpfZ/uOXKQWdMHUQm4u38i84zLUxHBdMIt4MCgYEA3D2m + + hesxOjuUMQ9gNhRVauq1gEbZ3V9RcMaq90g9xsAXB6ax2YkFAy7fUWpfdn1LIyKh + + Lt2aCVmvqUupsFLNOonDLmasOEj/RUbOxUg/TWpmVq1AExAF3ZQG3EyB8ig4uEFL + + ZJDgYQ/IWIofPgZ6GY5LGR1GX6pgDbqXCJxD/FECgYEAsYSGbrMu/GUGJga6G8M6 + + F4vwqtY+llyqeaxttAOvsw2TOYuv68oWBu254AjDTo1O4+CQs+JskZ/1mmnWJ7sZ + + MK7+8hU75xSh1Z2GPRunTj3JjySnveLVpGfifZWRckEf29WQTzk5HoI2cjI06S9Y + + UwVHpe3VMCsyGz0iAyLWfbUCgYAh0vINJSbFS7shobvj8lF//xXq4na5MddfG5PM + + MHMUYBHpYed0gj+b0ooHhe+tUebFOZ9JhE0Q3I5G0ND5vG26bMfmC2ytpEBYElzV + + HZhjOlEHRMpPYymTcxVupe1bFGRJn/WFN17OaU8akfPkYbhEzn6oF7/kF1VzJlHl + + x6IFUQKBgDVkZseTqRYmO1dZxwEqAEgOZ+4c7RJ7vaYp6x/JZcmDD7UvmH/QAJUG + + J6S3uHv23lcR8rwtAlbHT1jIW+kK2vst8M7W4kRuXafj8nW/mk7mDMXzXU1rD56g + + xhNZqMb2ruLqkEUMRpbklMHlKxlZtk5NS9vslPxFPSDqPfwctu3C + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:l43byqsidupuz4k4kzskysj4hy:fnacy4ixivqrmptbpd5tvybb3uhkha6zxucyj57ovqbiof7dvcqa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAnYen24v52vWuFDhJps20/WRqmksmi74optyIDS9EE7fL4YRr + + w1EnmATjh/09h//Yu0LMjEwSwfOgfKK9VK5FmsnWExfSDYV82Gcca87JRNdmvEvo + + fsBMZOFVbJDLvgTNha8Y4cHiAmtom1fTSklkEwml/pVPvKnTPVT2rFTp6S5iOun3 + + W/akECkzPKXuUJ6erpvzF9ksQloyL7d+UQyhUjyL6+sQ8L2RTkoWWhDiTagXiZJT + + tnXvDXugY917TpTYfwaLuscpbzmSc9eaXTBk8cC8ZGSWluUDaC5PVbheSXfYFLoQ + + mizLMZMCz/Pih6kNWiFb60T7l6TCNr1R1YjhsQIDAQABAoIBAB8p6A4pydsEQVTk + + scVa6pQ6WlB9z3lTvC0OcafSEvCnqqDJlpwEIQYU6YJMmfCer5yUIW0b25YdAUHG + + 3Be1hjWR+lS6oKZmIwWYmGnHdc+1oTBc//ibSEGoxkJ8/qFvx8zLj+uRdImv//jD + + ThxjGnYdsYYEucqD+jMm7Mm43rFvWScA1wAFlgKCbylLXRZK6Z3R0sTE47SZrNX4 + + FGCRssorYNybFgw7r/7ewbYyKJpLtp7r5QB/YcQc3/ZZKVOphSqSwpRCTDLTMH8O + + MwhbefL7jz3VJPzu3Solm9W8udhu5A2iXhXUj3IL86N2ZncEBPyh/dRWwKFPxvvr + + Xyy91rECgYEAzyqf53UCCRrKfBaPgLX2bl/lN1cdJWeRTE5CQvnBnE4Qhwfj3nN8 + + 5yM597eA6ROLOlZmFyAyKGK1jtkS6ojZDnlAr7nVq52+kVqCR86REybbbaXjzT2f + + Jb7a9+1pQZ/bb5n7xs7GYH/LX9I3MCPhSRS5apf2G10GPoFiRe6Iv/0CgYEAwqm7 + + Q0hZKxk4D2+mG78HNKgh4WVR2JTRrRR7XaVTXWZNuVhKW8BBEyniFNyn9+AWQEAY + + jUx35hyiFz6DF+TlGZ1cPOTyWespY9JLi/dIdACc9K1lWAcniO7z2ksYKycPI7IU + + 4K98qhrbfLJPAx7rF13uKcp68snYQ57g1wWQ9MUCgYA7gcnmyVRpWxm4pR5ZYWtE + + 7yS/TbWgjexNl9kuteEoTcAvmVOaDWBeYF8BSeOsj6GZg0HV+LiPozL1smLdnauD + + nc6361B1+FzKEc6EY9CGSM4U4+bYiI/TXsw1FSv73rhAiWGqDLEs/OhlQNP7bwMC + + ZAKSnM3jtEfb4nxhDBCZ3QKBgQCWZyX02lVq41VZN96T2YjrumxTBkGyoWlP3V9j + + /3Tl2UF8TydEtMqSz+2KSOLOtij7A4r0wXxyIvVqGDaZo5UPsXGu6wYFS5jzM2yD + + fFBSsJaUxdRjq0N0nYtzwkmuLcOYxOM0puIfXBjxw6MguibSKxT03SkZpbKerIb0 + + G6zgMQKBgCU5nTQTh70j3b5mcynwsvOwmOD0YEd0Vgps2VbNObsBB0u8UkcUiZGz + + 4jloIGaqTsf6dsc7hdHdkL2zCiBtbSsur+HXpVUl0HbtAgXhsrCu0uzLHInTvtg6 + + K4E7oqX5emi/cyUG6Emx78GDO9dfYm1dz+gTZnAek9+aQyo66F5i + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:nnv4vrtlxmzkurfzvonj22leua:ywcyijrfnwykraku56dq7v3o4ts3xsxqfgmk3kgzwhq2cpest4pa:1:1:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:rq7lxvy7oorzoamt2runjfgvky:ebenedfynevee34zqofeu4vtv2bgu4dfqhqy34yry5lb6x4fdy4a + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAp3GpCG+2qiLvwO5aCQrOrjr8Uzt1502l6qc+LwbJ4MDgH3pw + + re9knaikOrghUl/qOo0iVCImZoBItDShEU/HZSXDMMXyqZVHNnpnLNn2EQOgHXdw + + OK6uDNONDJg7rb0zIpr5sF4HoPukO6odIqogsA0S3VUhYPL9YE7MHEj4IL91AhH7 + + u2WdKvxR9ZOZ90Kqsha7iBhMzy3/JtdrXRXP4NRJPTGDSGo88bb33P/i4CN/GQ1W + + Xu9WspqE0Jn5yOO5YOrxvwNJK8l4dBCqMmvGNLucul7UYDsZZNHbixOlrrRexbP9 + + I2Ho9Gsfx1hN05vKNlLZ2Tnuef18XeLgrceTpQIDAQABAoIBACA8Nqsv3IXdA3SM + + PmuSt87dfrGkVxKwRWKLD2LcxvUclJkiyHoHxgI/EtzWEV4rJmveu07goy1lAXol + + zqNHTU746d6kIQ8KNMM1ZdMB5AgK/2Jk2ccjw9Cm0nbsAMM2ExfUp4CPXZ8ditTM + + r166y1+xKKJRDwO7y9EkYlGIr7IX8XY0QIr1FU26QItZXL/Dtz+rInVx+UReL6OV + + q6bA/28gWCOkCeoMqlk+LGU0WWAFryoJr+Ob/TjqkjFX4nURFXmVhJwaqoVMZHU1 + + J2O96V89Y7boz7VAuoZc9fxy1IH/q/p1S/DsD69EN1elFs+g4TchWg8AdaYK2xg+ + + nyCS/fkCgYEA6GAbr3Mf4++xg+Iq0kV8lFRrxH0fSMhdLeYJuQjsgCjzkLpuMUX/ + + JbkP4LoUmv5W1HQ+Gq7ZAOmS2VseNjaeWWrZwdoR7s478OTFbQwIEVxOpyzi3MR8 + + WKU6KiTCzs4ijjf3f2oyf7Jl5/aEnJVhiZrTw2iNhk3jnqZA3h0AvE0CgYEAuHef + + JTQi9e3rGr3KWEl0vhbjB7W6isYdh8+xZtwdYHSVdogQuO0TgPooVTkCrJI0KiEl + + xghSqYF4OAh8iLHGtexrTahw6/xkxAx5So3PHev0eackG2ZFVYbLcRxxHL2n+jew + + XAQ1j+T8RdWOVdXIkWTOoKq+lYqwrB7JCUr9gLkCgYEAox7cMGRbTZF0BkVck/Ct + + TB6a6/p9XIUyS8cAqkBmbGzS1ZTZR4OAYUWwrKtTTZ4e69KRyf9VW7ubFzNMWPgs + + Xk6Qf/EJx55EG40sPalFfJJUsCvlMN5I/5004GKf0baIMVd+SJYOzu83dAbr/lMq + + fgMOhky9lDrW/wZr4L9xRb0CgYEAj2XeP0uSSd+Tvgv/ujYQHJ0qC5pH0w1Dc4oO + + /EjsRUkbzzLi3P7fBIpyxB03aPOWvZFbDeD2cXKGA/kE5jZcpJuOpqXkcm6X3pdb + + yosGkNoWCGPX+7y69Ut95wYXICKG7EpSPJXBFYUKXzcuGKfB7NSSk+9njFRuFr8v + + xJuZCXECgYAyyV2Ql8HWz+iF56c7Tar6vjU1iaHHp0iTS+OiZbe3iGbBaHbCpNQ+ + + SiAOcFOhAJjw/0Ez2Gffvmk09TnjuiXBUmYHgZKIWIa8EhAQCklLDUl4YmqcRA2s + + HvvNdvNPEnpyoXKOe3BmANrjkNz5Yk0gtOXDH5ar/JgweQaTxXoflQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:syhziku625dhr3x3c67oa7d754:cbp5qtz6vphepl2tmyo4b55o5x5afrdjjjyt5i5t35k7fp42qw6a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA3NxdDuRuM4xF0bmoRI46FoksTeyQwtzCYuL0eEhfbn4PTB0F + + jjcTcDp3Lc+E7FOT1zUU0wp4rhvOZDTpFjrW8n0+iBZzZCgka1L1sEtncPDgYb+/ + + VDtSFIoSKqQLmq0L1hdA5oLgXWEE918kLlNjN5l++W6OGfzB0ZaiWbJfQpOyYWvv + + PN5P9CFxh/aNO4924oivqB1iCRJbP1szGcEuZ1L8QWISZK4oauQA3wO05UGPNrQU + + XIEJDUoEtTSlsuOV+LZlFWkEHD7cwtlG3ZF9u2r+iHf0xcOPqsmqSIpOjPqg7Uic + + Qh9r/g1WwKmlmzgYgg2dWt3QUTv20WYZ6GOmnwIDAQABAoIBAANwH2IMy+sGgHcQ + + IPPsPjA9SLtvzB2/FPw4FIkjde+A4S5p9z0BqM5NmARWX3cpopADi1mbp0mX34xv + + cb9prBCQmDQYcV8Plug1cuNLJobmC6rJ3X8WAKRBiqCE9t9HWVCnAljJlGzaW/BD + + 2ArWkSFQ74k6H4EnuOv7yyGCpXlM+YfJJmAXSVM593BuERTM3//Ki5ctMwR9t/CN + + rxzDVrGhbIOKHWWAKfiNUseZVuy5F5QR7772QU+mycAvW2qVLeKs9lYpLekwqlLR + + TWYjE3HVeuhSbpQymHc6TsLiADlSVgGVC4mDeg80Q7vLEyM+BS4vkouJOkZl10ZA + + KdJT2A0CgYEA4suaXxcc8IrNTyE7lS1NCAXMYaI/Qlmszy3KfR2aIFzbJWBRTlli + + U0WWVbvVkcs616IKEb6jMgK3gJK9Sg2+IuT8W/DBr+q68/iTSJcjOhWD/OzqCHpB + + Y5tAkLA9NZf5QUcS0eSaZzWJdn3s30r4kTV/ZtfSbsXR97mlb8vRWaUCgYEA+U0g + + XARhs8QDChYNRjcBnZQz8usHL/LMXbO5h9NNtdfqhjYaBljHjYgu7cgEeaj5TMPr + + rVKgVUmIgMun7mBIAOTsQym10tM6ARf9wIR1+yYxbtDgoeaWSje+InSaG+3hYVe8 + + o/T1QQFQPW2ngQQ3OZ+YRrZLCqVw2qRLVQuiI/MCgYEAo7WKsjdR6YSYHRWFF/LC + + VxcwaA2hEjj/F/Ia52OV3OSKQBmdtyuoYSmrEinrSTllOUA7eoGc9b2mTkYeIzV2 + + WWPnkkpg1aZf2zpEvrJyeDwNsWYmrYXqa4cm/QpqtKQGBYvTVvVoSzYHCyRs9uX8 + + NX1jgI4r1VAwd1xnwiJi9Q0CgYBS43/k2FgbywovqlFTjSpuWD5FgDtth87HQOBo + + 9qqZ0WZapVZV0eLXffYMfTpvsOzixylvAU/py38lQ5FcQoruMS8UzaN0q2JXxsBJ + + 6EDJ9lLtQ2nMqrxBhPMkxZwPuTH8iY1g/islJ+ij4/eTf/FUqWmZ6TZeHc++Am5B + + opKQXQKBgF+86OH5QEMW5MMMKBhL09uzyMnM/sweKLo5fNYL+7hiO2Znb4sz55u2 + + I3xsH9+OMWq+o9Uy4q4QIqgGApbfrujOECe1z+j5mZBRTIpWTtW4W13sjT0Srqbw + + rGIvfueyhQlQqxcKobvVGIdeU8co2tG03Xg9jlFhrq8vMdnxg457 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:wlszole5m2emf6wbhp3lnlyfxq:irdttvny74gxdrcotzfjslfq7p24kyiigyrm5shhw7zyj3hsiuba:1:1:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:ad5wtml26s7jjv4gfwlrs2653e:hx7zlqd7fp44i6ky6lfrrwcqxslkg6gd6x7moxt4kxkqvm5d6r5a + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAtrhCulmdP/BXGRpy31rlHCP6E1vlAqnbaxWG3o3o0VlTxS2a + + Bv4x3ac/KhnIfkznrXj5G2o+lYNlWNt5DhKIInA9qHsPlIHeXHh8dtttnP17to8Y + + YtMjGikMyfSF5tTCCYYHxXxFknHZ8Rf8eo+JCuOzFqhO7RYSN3Rs7zYTwMeG7rQX + + PZgrt9PxOYxlGcluBsphr+PAm+ImFg56vk9Xy0fbDMXI9q1Po3W4eo2RTyDdmBOl + + y+v3MVc5L0ai7Tw5wiagQD5nnJDPwLcEEsE8kj6GVa1wGEUG7eERzS+QsoBLlmkW + + GLThyO9/vCp5cxoZ5LBIKUfq9W8D4bH5mauzxwIDAQABAoIBABSh5o8KXX0B06P3 + + CO+ltjyg51/WPvGNDUTLRSkjrHLZ+7ab4/T+29H5TQ2g+bMhVgE6/s4Usi/J4DYn + + b5pM3L3JdNJDNcrW21gPwZDeTZiuRZD4xDqB4vMqSCe/NSY6nL/cjaDEMUr3EN1u + + OvP6pJvr2FDU/Tc9CHOQnFhqqn0DGfrevRyBBD12AnHdfA/hlvquMdgp/u+MDeKg + + 3McZw0oVDqHHb3t/GwYNvEesMKC9xeA08YIMQOMYXyUxZ7VILiqVhUc5F5Kw3l9D + + /SGn+DxYggL2+C/JwwQzbgHRCWulZFe3l8wDI7cOI6ajmjJBQDMx10YYeZsUHmEq + + EkEGOuECgYEA1d+v3L2mRJJrjblh1juJilnSMnsIiuw6W6fGBfR1OCsmaw8MQ3jL + + 7JH90L9kHtchyz71lCAf7V56txXxkHvn7K3zuEn9qBTodH5GSKYJFYW35zWwARsz + + J2LifWzQLYyKg3PTcIm5z9WMCmBovZhNQivhhqRdGeRrZEyVWg9aXLcCgYEA2rWs + + JM0ywx5F4S51vifdM0PP6VbVCYPfXeZ9tDLkdA+Ztz80/IpNUoQGmfmTFXk3YRsK + + bheqltMJcqC7xUm5YMJLGlmLkYRj/5s9Xux01pYNt9TDJowu2It/d09OIPK7+ioU + + +jiparuYULKNsEJp9cSRXyZ8qOKB8PhX+GsEcXECgYAsDynOgq9G/xbzGlaiaJ98 + + Beb8iUYIQIQBL73mqiafzJvcgDwZhkAUWzr7jwIULGOE2FKFEl0hbE5Be17JUg1E + + P82ukGeWAcClhwH5o2LJsUNieTfp8m2GVqOsDQeR6pr6W5kaXPUPcMGpvZS2QjLg + + R+Ps9d1MITdScUhvRixqXwKBgBlQB3Fm8mYUvd+3AdeVQ4uoYIrQCu4D/jke8ROH + + BFvOZmsH/LjxxMs1DpKJiRVmJxutBoMBaDP2jtRed/z4cGUbd5fAH2AjI3O04uB2 + + m3sueL36+O8gMFfNpV4IprE3hrwIXM8s+aapuZI1aCKrPRo9utl5WdouBP3/sCbH + + NAdxAoGBAMTddDwt4yuRavBVlZSn+b+DNd3vV4skOVa+zV7Pdkqf2MLsoksIwQhz + + DT2RwZ40+Sh6JIBaxKERIRTUE0o9zfWwWQ+csXAGUxUo4Pd7FV8svwfKVl9vqAIX + + x1XcKc+/jgT5lvmkpv2TFwke7S0jNvUtpb/j81L2QnYg+9nFUxDw + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:jfsmvwzuduc5flywq6or2sybg4:uguwgnvjuxfn3ivws4zpt2dai4kzoucp2zr3olid52xeln7u4jqa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA2K/v01VINZgu6XRXhKx1Q9Hl8zjkve0R5lQmY54p83t6eF7K + + iYqi9X9pFxVmG+3pGwMwmA2ZO1lg6+FWhiSazDk9O1bEdK/fM6N6Pyrk/s1imIf0 + + 4lUkZH1tW3cKuzsaCSXRvPKqMRXqr45ONhhNXpJtxJcsrJXJrQ+37PtqJnbQHVo4 + + UzqCBOm5ytUJp65EtQDMBCdf8up4E5HvpmOzjfEw9SoJ5bREvuF32t4QNiBvkkjZ + + Xv0G2EtXBsO1ujpCQaRftxVCFermNDt+qL6s6pnYsfgpNMBmMgI8YSr9aNQrMDdD + + r50e0MwnUo7uyqQuZkuhC65pdaL0Dc5Fqi4dVQIDAQABAoIBABZ/5kImZ9IQ1EYv + + a2r+UUrSf7MKpE3IUQR+lmHfqXF7z9Kx3Qv9FkCxkyLveOPLh1njsecH+nI8LKEx + + i79wC5bLFr2Tm+CV5nJBNk9az95ZSzSVYWsi9h1tHK7TpIyebWynvaiF9gAUy4Kh + + HyPk0BvSzo0MOXpOL1vF9w4naPVHTfC+7GyaDld2OeZqIkrLJtXBxMnq/C6WTRRc + + yurMaAaQCtp8ZgjKaw8vdud+KMfXDJZqNIxqjDe9PN9Lzh/sR53y0BifEYKeyJ28 + + PavJWKAIUH74aku45FFPjZEIJ/a/JrHEyTeOdcn2a5Gx/dZUN/h9zVtZRgE23wKA + + D+Sy2QECgYEA/0V9P6NRlP/qz6+FfCKAx7xfmlABM6qvtVgZ5kFOACd2diY2Io+y + + nVAJa1no9JGu4ufJsRYaaa2ilE+rekXfpqXBngmlazrRgLkfyy0TkKDxMgP1wxkN + + owHh9Hgr2/l09Hb8La/1ITzqIQJJgtJVf7ObYRxW2fQD8lTUKvz2nEECgYEA2U5B + + rBME13Gxx/Y3fMhGJJGuJv50t/ECdPxUXOzg7WkcNtHXB654YvFmsr7WxsXkwviQ + + k5bnewj5BHQuj/U5B/G3kVubxhbdiPldQaVP+xfaXTLFhUodEshzsA5mlYg76QFA + + /iKUQ9W1gDvSn/xK/ARLIm+GdWrw+JEsRg+QTBUCgYAobE6bJzeiCqyaWscekzAl + + cPUKsKSgE+VjKCJhzfGWIKmnqAFmk67LLoNvVnuHTxKMp/vOaRuhpHdcWQlkgXAb + + KaBxcEGbq2LFqYsZV3gDrRjEvM/MJ0l7iK7JUcZQPT6B/92LNpPwwX6p33zYlIop + + gL2YMS6nsPZ3B2vZqtk6gQKBgQCY/+dvP0jWZB+XOb1hpyTz1Hp4zAnkBNYFBjBj + + 6QiJP8t0sZQjvWzXxT3YtlNESstBl3872zEKSIwD3cV26GKKPF9SAd0QwMKkEWbe + + tIU2tlmx6vB1Y3RK6EXD/K+vsubzrEVVaYVYqZyMOBKZQCqPfHpmOX3DKFOXv6cb + + gRPI7QKBgQCLtj/0Z4oOc/o/HaMKnP6Nsu7vCtbB5iYxtmA0yhBTB3Sf44/1mENE + + LZ4dVfA/ZbZH6M/+6xWnnZJUSXSS07dVO/kjX8obYRGEMXlSFtF2hsw6P1fkJBLU + + 3KPOvN+NxQaCi7zW2xoifSGPvLwzHdMwGWfioVoUVhWXSK671OHFuA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:4ewm23jvdtm2i5xf4gck26wg5y:7cujxxc34mkfkmwhbemqtuixuektknmhhxlmujcekibf5amfwwga:1:1:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:edbq3ekmt5si2lpahrwyh246gi:34snfcth4337nbu3cdgznrsrzmcudje5ot42rft2kqxyad4uyanq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAkFwLHxfDZEKh+ekOTF6YXW3pl2TxEoCMoMegV7GLQJrmj+hD + + fE7WFpWGE3DPsZWfVU+79VlU/o56/Ymx2REZQCFB19UgkGV8FPlGDjsYcXPU08Wz + + peR2heNrx2NKF2Y3v6CV9Tb5mJ58ibfnByNyjswVstEiL5FCRGswKGos8eMewmJ3 + + 0AnC0s8txTEGki/mI52a0QkIlzgJTa0qu0Cgm0XnnK7xi1w6Yli4VIR6VbNrGhwc + + xChrb5cVD440H60LGJvqNrhAoAy+6Lg+0N5tWPuD3ZnyGqNjkCzqKVznvhTyD62B + + 4Ap0Fd5tbcNgqHAqmyMIvOfsZYmz/Jq6ql8ppQIDAQABAoIBACK4IGyf+Hxakj5a + + 0PeJILgHwVCKFHjQtgHNQUEWEFm/Z4hg4io5g7/2wkJWtX0OcT3BaYE+tPRsLCRi + + Q4XjWOFVnlJcjfJslgUtVq4BhIV0yFEOkYBqjB7zbW6M8Lrj+LB73NUXHbyZEXbF + + 5iiPW/QAHY/eQIyUMQ3ngbOWpayfCLJ8M/LZBorPb+JYLLgAygfOP2XUH2+kRbeH + + 2X5gOhywDkGSeoOsBCI8W3f9Yhn9HzP0E/htrZE5hhKim1ZcFcvSW4Zu6jLSMOGp + + oRnpYcyFg2Nx6JIiWd0w+f+JP0Nx9ukEJvHmJc6zYZptxFCdAPW1ATMB2vIao479 + + 1HwchgECgYEAx9mVKo9CA2kqoDO4nEOjV06F6Qc3me1C5KUglXHX0JQzW0Vxt5Yz + + ygqV21jokzksiat1D6cGnOMPqaaz1bQu+bxaBO1LPku19dvDfi5VdCy+BwzUVkmE + + uj6EKqX7MsKkz8DgOPXRJErBIkMFxK5q2qmLaJ6I+QHE6TAxzuvKTeUCgYEAuOtB + + jVNHpNgWAWgmmva49j/LmWy6pBpBt2uuxXSmKlk4PvB7oAzDvn5HPKw0zLZ6MVsb + + /e+YqbLGxfAJeEsVZ4ovppTYOdClVaPlqvnf3tztav/JWA5mi/YsQNIJJRIGwLZf + + n0lyY7Eby2GVH4cCRAsXmDFKnfWoT1X8b39JsMECgYA/e5xooo0jrDqAHS3dZZbz + + Wtwqw8IjwTxoiROqpTka5pjRu2N+H9ZfrbEgtkNa0OSW7sIGsNXm7DHDgFLL5aqu + + ZehqfD5UkZRBfwfAg1NdzgCnGKoyprPkvYsaSRNccnwMCoavUVaYIq7rBUNF0Onc + + f9Lq7sEv6CH2uPp5cmkXCQKBgFbVqm+p9s+y5Qp+FPrZ9tsz8/C0/SQIbGmseGKi + + t1DVmrL7jKIIvHacp+kW2Kh03AaHSSrCs0ak+/CBGoFRiNiZLG0mIi9sCeegUj4q + + nnTx+88uFCd0g7UfwYIi30Z4I5GlUlvjSoMD7RBhX3xxkp/PMaI3K1nnvMSclTDq + + bflBAoGABvqvBpYQj+Lv7WWdC218juhICDEnkcEJoZK1ElS8AIFiQ2m3oaKR/+Qh + + ONjJGROx7v5JdaM357QPllCRuQjS3UfU4XOFQ814GJ8TiOzp86AfhT+9h766nQ0Q + + TQo+tOB15TiaBC0QMChvFNibHytFmGtsMGvAfseEEWYnRDDADlc= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:h6zjlq7mo46y6zqu5w2whkpmcq:ykakuwcliizsy7n4gwqsntjvsxnqznzt62iepifwuy3b3kwyffva + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAu0lVdI3gH/PySDIEdhByXGIH4UxlSn1ZZs23TgiEZhxVIeeu + + HA7K5uHfXlstKt7phM+6x8j3hSHPMpq3svwdVqioAr4133F6W/ITVvZEeBKGrmEl + + kd4SI2gU6yvG/iDJmf6Pq9qAq5embshOY8gC737fufoXMkaE9fiOMXpzf8sqF2RL + + w9D0WXBiI1g3QvR3Q65SQTY+s4N96odAAD8p5HgO/LQlNRA5sFFJVLfCSlmx6FY8 + + wIYQnv3VsK+xrdo1KKNOpBBlldYth64nhCpzX31OWDn2nDsoPvZgU23ndXDPcKBK + + ztgZW5rJ9vt5HGbbShKFKBxGQCK0ud/IKOILpQIDAQABAoIBAAm4RlpYc6GM5k3X + + ZLJg66J+RvTrI1WgmEd01TbUS9TF0yhBjyBvJxog7lgGCNvQ+lMVedbdB/WNmeSB + + MZf1LCufcKrFxuN8DvLfJyBMAyUtJva9XXcKzKuwPueum7L8LiJTGw869ZMSOYXF + + 2QWmL3rQ/Zj4EQSfss5WMkEAnyZqZMY1wIZxdnpvQ79iGXy8dJDMACBfJ8pLTeuE + + lyPERg+RfDlvCCP3rmcNyNLcUdA8caaEzKS7bOhXM27ZI9WZ2D3wR2WyohCl9eac + + EKAquDoDwe4EVOv82cphUuFhcTF3xU3ddRADtP7Cz3UtuITc6w8C8TeVB/pCpUp6 + + 9LDQlbkCgYEAxzf0oesOILxQecpnIbylDIk8khnBVeCAmXpYWFhjLu96pf+Lf26F + + IBiWA9jwETPCeztPVZy2KDnt3lh62DmPUW4HQN2SVINVTo3Xe13Ve2DSh4crYjuk + + c+B4Xs8TyXCA74FL19H6EbgSDzf7p7SICG8IHMuxcoiVQHptdOzJiWkCgYEA8Kq/ + + aM1D1tbRIKeICmqZATkwJJG2MOB6FFcBfRICpIGtn90+ztVdjgMfZ2FQJ9Eeg3gj + + ImjrnTig0I9Qlxa5DcgUqW2ZueR+r0Bw6dAp2VzOy7nWHZUyv6RGQGMA5vModGNC + + FvBj8mqD/XOpt5VCw7t8MX1r+GgBZfAPPiiZjN0CgYBMQAKGJu2VYf57XxjyNL4H + + ek+QrALv16nhFI7T4aC0yjxrZNADyk1x53cjqdjY/LKncCABaKXf56w/uiXqtL1C + + MZbdIPFtH4d7NZcQRO389yYdcYMNaj6bi4MG5sNwCnuPMDHTPS81sPpYkNjla5fV + + goncW6pjaBuYPkO+yRKqYQKBgCl1oMfTJK6sDxbLBZqVxon5ahvCplpBMYazfmQn + + aCEi3eA+YwWKqDVAwHY0w3Q4iEMpvRO+c2iASuPi7IU6uuJu53BQmzz06gYS2eDN + + pYf2fwGFoCc0fquZByksZQlkNkHmn4oIG4+1XcuZ01D2+6twbvKvopwGfscq1dVl + + dR5ZAoGAMsHeOltLyITJ8Ti9mFmd8HVhN5Z10sCKtoEBagvlVs1e8egy1wh6l0Hd + + wPj+r3UHNfoxiWQWQffKMw6sAhfAuuRGP8gdcglzq7hYeVpbmw8eDn44OQYYC3ql + + lz8eD0KbSm8MlWvyGvASgtquvuDK36uMGEBC2n+nN8Gt1+FPGHA= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:heczpdxphw5frp3ri5sh2hpqei:6wflx6lphy5mhtpfb2abznoa3yk27ynbqbzcecs362miu72vkowq:1:1:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:rwikq43zza2vvcy557moizudru:clcrnbchmh4ucl745t3f2cwo5hwhchbvb4pp5vbapqo57nbh3iba + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAyLPhUE4G+3cl/Qb1SSmciZrbAJ8qFKZutcWqQQM12THlNtzg + + gfl3wTvQsPdjBJQ1DMUTyWb254Mgdy/KJPGI56NY5WcIKMvNUe5QUt6hzH/Cn/uF + + N7z0hZ/590b7dsr83kir52eIjcyy2Bv8dYwUEybWv7NvRW2pboTuqLpg0ww80+vT + + oCVvgvJhet2V5eXmElmzb8HbVEZklGVoUg0fGHEM+hzXiv+Nvepwm4nC2+Yq1cay + + gB9h1sDAgZSERoJrczlfi4pbrj3qgHMZTqGkzKCy3d1zmKYIOub5TmCnzMAa0eHT + + G7i+h5yWRm/k87H+tRdEkenZoPlgk0eSVAsNbwIDAQABAoIBAF5jIjJnD6eRaD8v + + 14k51ZFtT1NihyLBBs3bkO8UOG3Vpkt/4uGdVfF9VO702Q9dN/mycVTFZJaKN2l2 + + AyYOpWjyjCsOomq1NfEzF3lxlDwdVYVxfzwwU/rHuoHNUxOR8QwEtzuTmEe/ndg+ + + iSMq5oH/QP1UwJ6xLP5569dUF5cIlBfGVuyMBfynjHrtQXjUCKM5ZJ4onCnzm9f3 + + amS5B0bMGpWNSnOogrUIk5vlgVJoydRkEWook0yNYxx1/EFanx3rpzE2V2IxHjXQ + + VvKze/lCNCddGWNvgqevsBMeGUsrl9VtYQ0fvWbYdzNrKb7WtYmXE+WkBPm4PM6x + + Hxe7k2ECgYEA4E1gmYaHberFF4ye3tZ7Xdeke7C+g7Rc7JfoSM6MnUC1cnOklipr + + yhibWkqGi+mJl/mWB07uPz9c/81LZWVGLVJMI3RikGRfIb70BPXddNIaAXceMd4b + + cLx6rQ4aWLTijQXqu7t3kz3utgX+9wGbVtB44W9ii7TGs7xVERQs8X8CgYEA5RC8 + + ZI+4lMFFSsYe6pLQMauLg7d+hJjcr/sQ96TDnJCMCkcDQ9YVNepfBWbF/TZWU1er + + F8RCLN+HtDrXqaVREf6ESYOccF/rKCavI97QTwD2Oy1PD59Oh7gUo1djjRIPezuL + + 7EnYvcr9DpNMjDeKKiMocAlWSRDXpSHaAx+q/BECgYA/DaFlJws1G/URvKcAb3y4 + + kaEcYD/+GBqzK7TRmraukf0v0lBnIj+wzSAGzsJp3FmgjjndjhOtVeuXwSc7tq92 + + mBbtNI9slbqkauB/8HmzmEhVNx4W2KAQHfvCYB+J5jd1ez9UTMu9aYCMTL0yxJHd + + YrdIcB5ctZHR/tRO+8PykwKBgHIvVooWbp+QfFcazbyG9MtdxQ0iwimc/Z2n3Lxl + + 4LDCCVzyKzl8lVQsAbPymE1x8bRX5kzRo181CjOYhXrmkrQSmKUAu1H1Lob0Safq + + 4RIQ262CF4AlHINhCsClxlVDJH58n3JpGWb6sgy69pSK9w+sOPMoZF/Fyolhh4i5 + + F4XRAoGBAL9lDVciG+f7flylMPFkvKNcdgKMxeTAYdupkmYhBqg1Z1sKpLWzSLHM + + HgHel+wm8sDw2atJ0QCgwgDWzkSerzz4MujYEuntM7EReMbx5ArhqsGo1abAo5iT + + P6pdPFMUBWaw0rVgpEHdcJylb7mIQsorLmN3KaGrFs64/rGVM/4E + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:sj2qlco6lwavwmcjtuxohhsn5a:nn2kte7aa2q42gq3fyy5m5ojvm5qvpyeqpvwzswwrti6ushqg2ia + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA8pEDu3IwxvOnY/TFR/sK/m0X+v6OW4nDv/P0n7KmikC1elek + + NPE+KZZYciD3RvYqcmT/y6av37t6sV8kYDDRBNO6sYcAlByy0qqaBJEdp/q5sGRr + + tmF5zfBtZX1nvbmsy8x7pGrl8p5uhfbUy6RfJZOv5s6uIHJQMkae32LfPjgyGkTb + + Ah5mQgIHBun7NISW43ESNu0XPLatcDezO1gAAjQQCfjsLBcyU/bnNq4zZTj202VL + + Jl9G+JMdPT2qkEduNUyeY3B0Ot7XXT6SXFd/IBkoeO4r/LKnxsn+QaAUPedlTBcx + + lk91EPLLCvH4H4ZHxgOLAp9QZFfOdcx1NWc6iwIDAQABAoIBAArGNDM8RDxiEDpZ + + YfXribZ5ZApLCkm4mdBJ5sC9L7aOX0E66VlMqeUw/2a6XiFxx7rjD5WdJsy6SB3e + + yv/Wy0H6oZ1HENiDWdIPr92qEHYopdzW6Q3l0II8Pq+2XUhJGgrHX2qTMPmQ3fnn + + V9Zfy7YglDydS5C3YyaIioADpUTfJf6hUqmbHEg9qmmHOOYY5rDjXxd8L2gaFMci + + tO52tHBjHGS42DZVY4NYN8cYIAqqgyDuXIUDmI/RCxQst/s5BjUnLvK9FAXsh9pL + + XQvCDRU7ENMt/FXUzR34lb9k3OL15Y7+tgDU/7njberBBZmgvejcC5fLN3P5bMMI + + pIgbhfECgYEA/UtYVco6NbKdYq0mI8HQEieLOeO1ecdjO/n6amxHBvtTYPTYmkus + + YvpEQ0+VRcqPQppMgLxZOkXFsM9MsD24wb3CNb3NtgXQyMGFwo4wP8NgR4csoLlM + + cVu//PgupPlAeMlicLPxcvIRnXKQmQrOYit8iWy5VZ2G6bOiqJ65JTMCgYEA9ShV + + UmTZjvqv83tNnA8ViZbeXyc4xJE/qrF4Saxcb5Cihyvh4vc6uBGyXZwA0euybaeC + + Xqbemc8+FjoSu+N8WAbaKdzy96IkgIJJn20k+ZljqGA6a1s4OSoTcIklx5PoOCaE + + 0zdoP5opOE7dsM9jxtvfWTCxi1ZCts/vRJBX5UkCgYAGAoqnBnRZH9LSK4+TG58n + + Px7zka6VpCB7pNPHQKhyxvXUgBq/lnoRoySJgFLnZAYAK48TIuTvGAa3ykNkjyJa + + HnmEMuu1nO+2Q7k7w4nriWQ4bkGl0p+4tNeaVf0tVuirtQOL7wkUlB/M35IEv5fk + + BmofDKBdIq63ztZWL+XutwKBgQCCiJI9h8MrVSGAhCPDt2hhVTpb8ddRGoGK0mnY + + 2HRzVtCjJmNk5PyX65xMKXdqTpQ3vJw256TYwrctQIifEDYx7JwW9DVOU0AaSMUI + + pSWt3NVqXqpcZTqffV7SacP66y8XTrMkf3j7fIr8F0oFDbfztzjKFZpDNY/aJQci + + O7UBOQKBgEFTXq2BFYBWQ4ot0TuvnVF9/8/3nAYFZEWGGu+XRcoq0DsgIwZcb+rk + + LB79AN27BJw6gaskoGKH3muylECFWju3CQ4yDXSLFhZhHH/NN9p8Geu7eluWDNIJ + + Z2wWnZzIgOK6W1QY1ho+x7+BjQDJ+T2NBK3ApbviaKA5dv05dcf9 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:mz5siv27pqttsl2f4vcqmxju64:rvxhulxtufho6pdbwj7rifneb6pei5fl4fqptcce7jdkbyrjfaya:1:1:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:74k3o33ahqgozn7iq5vgnnxuau:t6wznkzfsjrbudipdvh3c5xcnpyndge4amgfhajynisohhfhyp3q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA7Pj4z8JZKl9I36j9UWEKCdhdrgsFDo6B9Ul2KcZjFTw1shEM + + Li187RthvkMtN/ih6MpBWXx3YabO7wyI6TWWyYvfcTkXnkzs/bGo2ludJHyPucLE + + +YPNTLLYvvya+iwnDBk9y9gSPVTQKwVKN8FnXi3uUHN/s61pMEF4zIA5GhqtVAPn + + cKvpa6fWrNay3+qiyOz7HqL5loTUI5UBlyuQedQH0vcqYRDWb0eLZAYMFM7Q6kCK + + wWSwZEcu8Fvl07wCqgYdmhdWIZSU6PEzZjeHR2gsUirZc0/nyvOXXMEOQxGgkbdL + + ifYBFVNJxbZjPBZIIk3RuCPKOsgz4jOuE9gXuQIDAQABAoIBABX/5l5BuIEF7lnQ + + ckJo1BBZhUqDSWMYxcxD/dofY2yoQoMXSnf+NX484yEeH9RcNIoypK7he2/JMNlI + + FgaYhZ9ZnFMCYUS+XYFCShIjgssAj8Z65EoWlPhzrhcxxyCskqw9d6g1LtROZTKc + + cuk9y98WPCA9G/Qa7qYFN5xWPXbeKQRoBaDwnNIWkNTav1wXY5aK/w5IR2iqRXjb + + YemajUleU4Vbn8ge9CLf6iEj9ILtGeG2N0NzmYvWUNvbxN4HxIxd3LJHfLMZyqvu + + yqDuhSNTh7nKP3sYxWGkgkLcfoYYnpz3syhhJeAA4L9WXlvKtv92234bBzS6TbJB + + +DXUAyUCgYEA95419jXoLy0BJ1i0rgr31UwAGs7w78yUw1mUyZeUbj3xxAu/Fv7R + + pcxmxpzMa6CSeDxHY3DWuXqOu5oXV8S8MeFI6EgBlBiLWYoGVP88Ad0iTYo2q3FI + + Thwx6jyMCLntcIHJi7JtYMMJSLD7ctSgqh29iDyD1QuUmz/YZbVkclsCgYEA9P6C + + ru+W6NxlNZN702Ha+c41cN1vo16KAhlc2Li9YI9/Q51hezJMrV2ged8yUfYxFiPG + + Kqtk9y5CkNmt0wNZ4oA/8d3WatZL90cf+p0G/yGWb4BVNFao2Y/pMJtVFZV/T9A+ + + 7zDuyPPHjaG0swiQ7NX5eravsq47v+SXFBocUnsCgYA1tlPuPHNJCHIfntZSin6H + + /hxntEv/OFlsppnnwMGpyDYRWJry2gOP+26v1oNhNUuQWUMDBw8M3NDpUNuPZlWM + + XFn8SOJOxaQ0oAQPm+3gWZ9/QmPpfIE6sFMDhG671djzdrPJYcLoImZ5JirlFcpk + + HF9olffi1sg9hPPj3B0V0QKBgQCGveOJ6uOIto5DZRXZMByK/0qNBHx90WT9uo1B + + 9HjTPpizyz7tzsA1KSU1Yff+8/QTRSGcHh+tgpfBqrbbMyCgXgDNOUDQCYRGP6vq + + 3aoXb5WZRW+XFYJQBcIupX+qG0qlztaOHs91Xf4Ge0Uyoidy2kwXnZoMH59k7ofY + + 2nNxOQKBgB38kUiRxm2LGo4pbfuGhgiVf4aDRUDT4nwlaRV8waIu2qeaWuETaf1k + + bayNxEOYFNraatkRVF3AGnOJUHLNwj90HugILF6uXDc6FhlgQj4R3peui4iaDYvH + + OPLuU0F+oJIKhUnRB0InZ2Vbaa4hCKgvEftqNPR2EkT2YkHgqAao + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:5jvanzz7djyl3ritv6cey66izq:ognbst5tvfuow72k2lx4zlxbjiwpz2sjbtien4kvfl3ksiybhnha + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAtJv82wDGagqVX1ivYTR7Il5iF3N5NnlBp6aMbCRRk3wcebLT + + VpTYwlMfo8LHn/b6trMcyP2l5vczc0EfkHYE2zy2f31SRRZ/LClZqtb1mu7lV5Nt + + h1qLc8jGt396bvAQtQnCM8FavIQW5MZUxpMwizWuvNoMEcjOva8PXr0umvq1wROd + + b9ZdTSJMxD+uROl7ksX4F7zOS4e8Q/+s6lyumiZcSF7ZSF3BifO0d1tzRR/4/jv+ + + EtB4zMf60b4m7DwClMKzht2dYmh3Km1rWdVgxZEKncWY9iNJ9Ohul8TpdxGrTWQp + + bdYdjRS7mNiryzU6hHF4gwzaAEjQ3tXytehvcQIDAQABAoIBAAlttUMRMZdNyyN8 + + 0HCjwHCrlBv2TS2KiGKb34VlVfuvK7HJijfhMfmr3jrhC1ih/s+n3q8gpfCk46lq + + JmwwhRHIg+lFURSs10gmaaxxNJKS7L0bXXxTitrC1s2zvxM1WO68JJVc5dA+mXVc + + lznKOFGkJH87NAyy1EjzVe5ggPANMETFU847/4mNE2BYINy2eGX14AK+2ghkQYVX + + YFfO1OGZiOoxbEK4O4Jqd7KezCUlNGMygxveajO/mUdrRfD/DxTdo1FM69USWSTG + + ZV+VS3cKc+zxaL+lJVoYyVNJmPi+n9RR/+OtS8HZXqcwszGHQQbPRXWdah6mNiWK + + Vpf+ODsCgYEAzA0MDFWu8QVeI3yn1o4lKiZTM55gRIBxpFwVe7WCk13mQCp3XuMy + + Cm1WP47fMmTTGCOsNO0A5U6ZNf4J1yNbRfITCLaKkFw4mOmq9NqPz3DY1dfHKwUp + + bjVB32rGrS1Qs7Gtbq6P37zXUGLdrfL0qs80wqztkqJKOvv+il64x1sCgYEA4pcj + + yQO4mAEsz1h3RUrnV83OOooaTAd6i6Vfcdlo6VEnyl42uqbrmkzmzpRrYBrmWaTp + + ctDMy3j1tmRO1Dhpm+uFDjGlmIOeQcLwFI1kx/7kvqWdRPSVP5mRskF+WNiFV0ER + + dFptBVjLT1lRBP70rzCQgIY9loM9fdGBam0E6iMCgYB0xc6sTGimM90wz8i5J3Wr + + Tm107+DFsv/WAICm4DQOo8D93Y+ctMZRY0rlapzemQaZHOkTDMLjd3yEgpIdFXXJ + + bIRqCxT3El+tWqPkJiQAoeLlVev7+aNBF6dP9SontvQlMbw/yBQ8BTTvIvUb9BsC + + mTvnYNFAhjGW2dlMVHLIWwKBgBKypiFQTUs9zZTOmAj/xVdZhEsQWlsrwtEDNH0Q + + k7etGrt4SsvcOlThQ6qIVNP5ZEjBcwImeL/Rm3URke+xOAXFyZUCQ8fyFH0YuPb5 + + M/fM8NNKl0+5XxeAdKVhAiwSse4hUG9phtWKHjzOAgGHiGlseIAik7J34fsf7q35 + + kQ5BAoGBAKqKtCu0OndLo1ZI3voVGiQrbn+OZ/7Hhjs/Um9UuOlVopv8rrzqRpAx + + LnC9rU/zEVG/TOjkno0Kj7/Af49z9mxjtRzxP2J/yMujOPv6Eer30z5NjtLNyJ2u + + QYIiihHEUULkdZ88FIHfx5YImHX4E9lEeFG13JaJnMYbmvViXtyk + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:shbt5viqjzuewblgt6qeijry6a:je3omw53tmmluz6fvqupx4uh4jaejc3fcvfjt56rfzokzhgdczvq:1:1:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:kibmgpkvunbi3wmq65ohjuxfoa:y7gfq6oydjcaeui74rjoupf5xst7hpyjuqyvcop6yhk7xxmpnaza + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAsbpi7SI2V3v47iSl/b84TmUZKH6fJIaznI6bDCRiJce+rOCA + + LATvooZutPlbkI1QI1RxCmiZ0CPjemUpXwUIuLclBUIfZDBXnjZeNM+W5a2C5Yt4 + + CzAHQl/Hhr7Xtra5csf69dJkSOwVV63TpoN7r5TrCoLrReKlgqHp5iYndaHIsP2S + + lfUaX92Z74xtXEKxi/ZaOZHsMh5DpxtL6YSZjHkXXctmrwmwcAvs5Rc/qppOydqh + + H85l5H+PlSAJjP75roQXD8T1xlIFNFb5TUy9+fP9/NMqUmoES9eV+cCjj9Sk3S/S + + WhSSFXoG1DOBFpR6iQtuJD9qRjL2JkDD3PjiDQIDAQABAoIBABMkz7+Zwg851hY2 + + wd97f7HoD2Xuf69kSAgKz1YnPCA0LAx8kSnMrVBNGTMqset34UQw9g0oN7s1Bm16 + + ZJKs3OPirFzs4qs8zs9GrW6UVr1uK22U0I0p8vo6DWis+VjfxUmBE33zl+RH88OS + + QHxM6N+Ak7G56ORJ9ciErshg3zq7EKFjUrBMcpq7L6m+yzy1PBqZ1BcnaUI/o3WA + + W5pMTZFODnpo8MTWtmFQQ3ZUUnFfuBx2iwhVEP7Mu7BQJ0NG7C7GLsIBL0bNosk/ + + +7YbhKWyvvAiRvu46JKRIgv/Dn/iOjZqDnoM2UOBNWLbq6g4gBR/MRdgH1pM0m7C + + 4g8oNzkCgYEA5+bJ6Yf9HBBSROGoZxMppo92voPSZ0ykJSVRzOIu/8wFqQHlNXhw + + /udWfHCIqwmqcj7yhl7wYdSLsperEy/ZMnhRb2+KVNyAZBlRlWmZ0kX1lahYJ2RX + + 5s9+fEr+bU54ibHZy43d3+W7//NW09soMHyaLuhnGuhEy4/lRVo7xHkCgYEAxDJv + + yLooFWeasa9usQTEeyGQLuh5Fm3TfEXUluA+pBegTqNJ7BCegYl7tI5+btojZyXb + + 8m6LFdPj7OiTA4fHX8c+FgRpZkh/4HtbX+pKbKkp5IycMG7N9Fg2TOkdDfoJl4Yr + + NhLap4xV6A0X807fiTG4saL905AT6MOojbsznTUCgYBv+3tfIQLxrVP83Tcz5wYC + + 315I62EL7u+I3Heex05IyZ2mGjsz0eBGxzF1T+Y/KaC8IHd+uZO8uiVnbWP4FO/+ + + Nimk9SjIh94b+Dn0O5VC+/N2fF9tTkBAPcxnetNXtz/vxglVCUGuH8Lj+v7fuQG0 + + QEc4BZPcY3LtFaRyE/uuiQKBgG9ptNDn5ZtCGjaMyO79JhZGGPqKSTjTZSVNAkwr + + S2cjg4UkdPX4+gnVaMo/oMySU0hf12b0H0dl7Ci8ab+3eyCIpFkcaD4NLZDsfBcb + + lOffqEqBDrDyO0JmVW+XcUhelNPW/PLYAhLjPmVoChHA2G+wLJGzXTCmwKeNdEoH + + 5GeBAoGAUEAdLLTRoEUXSUnQ5Hk9OGgHdc44QDZjVfbN4sc08mc8HEXHcMDIwpMx + + LNWapDRO2uixnzkX5Z93spC23CerGRcH6co1fRqO4N8iRgJCvCZiluKamKlpzkBp + + HAMlqkVaySOcnAB1hkM6T/MzUu8PV55f0LkkbBbqF/hOk7003W4= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:7itcabaosxi4au4pdhtyjepqnu:emhaqs7urtgtsastqh3kzforde3y4kqm4j4yjhmbnoox4iqqrrqa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAv8HiUgJ/Iyw7fYq2drT3Ct0M5XCZPK+5tprVC9wP3jKcwo+3 + + gPQ/lOFvyJah8tP3Qdkth978KRU1Y+L7cG5wWFcH3r3KoNB0tUMsI0HaLRjbpTyi + + mU3MuLWlXJOtOw53BOpwFcFWLdXZhODNm8IxEvPKTZYeJstzhUmew5AujZkpnEEg + + S2gF9JFqwB2LGae5NmS1EbKXPHVSAUvGhuMBvWnXD1+LNKhLO78VFE2C8rj+zCNu + + khbF8XCsf0TN7A1rxuQ0xXlUDuAiiS7Hzx1doncQuGSCApKxBzAEKXvprl0UgCcg + + sRmVzYbPLWoFVkbn8dJgwwyzDXK/I15/aIioNQIDAQABAoIBABDpdKBu/++GMyj7 + + VuRZSYB3xm9l4t3rUaG9PhTxr6SVKiYurqx83i6vQ0CZqGbWMvRnxxA4plypNjA9 + + EJf15YqlAliuvHQ6blCeQAJMCIX5r0V/d4e1yNxxiMgFbj3LJMwWMRR6HLOmLKz/ + + dqLKGbHmNm1pU/dv8hxLRelRigmK1VJtvyplgYvJ64vaEz4Z9Gh1zFIHpdeiXSKH + + 3RRCCXVwUhwr8VikpsSjPeSfRj4BjyqlZr8ibEkvhr89hsNUxjrrZZ/stZX5x3Ea + + 8QqRUrfegEn0a+hq93JXN3Gn7psmrL0Xy+0/IrW619MjgCP/s9U/VIAEhVcc29B1 + + MQj1OQECgYEA86wnP5rqlw2z8rEoXwHKPkrk4gVQpQ0zVwBJQUE+myTHMaaMuArU + + 8zpcoG1TROJ5FJVERPQLvVttAOxa2iK04pAwtaCiCmN3CPqwv9j5DaLVcZlNqpe4 + + msFKDCahqgPq41/+yakb9RG7l8TZn1ZkfgRI1wIncphtlxCTPrUXCSUCgYEAyXVe + + XnfyAj5oN34k3nz41Ee0DYUIIVd26wUKVUFt75DwQ2qucHU1Vz1ajGXoON55y45d + + avd1W1aZMs24Qg3to0UoC6n2wX1gWyf8m3ibIbTQkArcePPZNQqbqJqICJvcq+jb + + 8A2zk2h1Zp+DrLWpBUHnW12jpDdFKOaiyyWdHdECgYEAsJCN4Ajg85N6UOEN38ns + + QjcCosQ3K2HlUaVjb2VXeBOuQsvsK2+t3pDrjVOqgr+X/NIsJcqwtwUIdyLMskNz + + zresk+9RezWXi2obqOgPj1HuV+I95N8LZReqECPuAMPV7+wfMwDWwT2YMODy0AJJ + + zwZLwYBOFTteLZhVGZselgECgYEArmRnmKeEW+TiGoecKu1MCZc4iiuK6jHow3HN + + jBfjrups0i9bagZMcoSuCbN93xzXmhpXS+2DLdo9K/lhc+zSte97xv0OmliKPN7U + + kVFKGVeI4+hDCoEsmfng3YdIEwu5bydYnOl/di+K0ZdsSOnIssBmInVg3xrpR4q/ + + idO5usECgYAeKvPyn3i8jPHyAZGcpw6MRpNEr7NjdrsrXE8lC/uKEHdHBONh6kLW + + +B3Tq4wBeUjQkRjeBCOIH0fivDjDGQqOKDfV6ROqJfqqsMCEc5Z2hMQWl+wNHf6c + + Xbqb9Vbs+foYJImZUixnhsBUFTFItBrgrjLPIHyhXW4htQ6Y/6W3Dw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:acgfc4hxhztews6tdk5i5dmzxu:qehbpfrrj6nw32tdhkgncqaqenvlm6sdiskvjq4zasc7g77pzqta:1:1:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:fcxs6wbchl76nfcmlc4wufptya:gtizcwbv67zb5g4ezygowytwf53zlrf544vgsglfmpre24fxdzva + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA4PxKNABaQ7xlzJS4kc12HHplV34jhtKN5QBoo/RSVzB90lnj + + GXAa1wMFDwTaruBznTbM/QEZvMtdgCG5SaQqBZJoXjkBcm7RKeD0OWDDjOIWfD9e + + xnbqOjko6XBj0ACOwSwJ+sc9d39Tnd8v0OOSKaI6wPrmXMzIxwqEBUBi8iJsWwjn + + Kn94dZBHzRZMuNr/FSsXN6t3KEhClEQAG2JbYrmbg4efC2pvQArMi+xw/0MH0CGd + + qDBALfB/kU93PN2ZEb+D7iGic/3pphLwmlDVGI8ZcS8bTcDnNj73TPabshEpRJTQ + + kQmy+ErVHyJFndHXQ2XdfNNbHptiEx5WmFRJ4wIDAQABAoIBACQTix8r3/gqRBVE + + 0xRyIpqDbS+qkYN4zM79PJ+ZuasIeAyHDwQ7toS8E7oU+FoAB29HY8xoD5qh7jQc + + dEEg5VTFEB5CZtR/fOO0Z4UHL/mDIWw6nyBqM2SIWOKXJod/0g7wrbL8SC4as9ZF + + /RKyWHQmSDnnTDwc4aRlBRwbIc1F4bWnbmdoM8M4jbw4ORs9Vj+CzGqkNDKaFe+M + + CYmyZFrc6d3N1bpKR6HG4zS4nwwIwHJxdwV3A8Nd8oABZ4ZI21FlL49uicdQR2WH + + iZhYfCjqayZWDIKQNxphaXMRuZX5lQPxlJY/3g/e6kEIPUc5R0QLw+KeEvU6gCQW + + gV3q0rECgYEA4mxMFUbDghRr5rOCjTt+kC0WDsJtLWHMLb1o7Gk1eCz8puhRBhAq + + 5vxAAPtx722HAoJ7/VkNpawsZ8+O+njjwt13UqPfM/04cz9LAsX7Nl7Iz13HX0z/ + + eI1mjqvZ+I+TPUbhv/aU103BXpGfUzDFAJOgfF3Tr9OFOgD9y9k41nMCgYEA/l/r + + w9/D06OmkAo4CP17cs3LzJTZG1x4HSF7Cri52BEhRj69ePkKEB8oWhhCg+RUVb6y + + qPBBHhnVyB+n2qmRacL2C8zvScbSjRb9adbVYNk1t3CfsKb9bIinEyYhyBnV9Osi + + bIPz3KKArI6g0UjTJCDz+G5J93geLJ64Tf9actECgYEAl9FzpmR/XO4id1rv85Dr + + yPJiMt1M5TwI8rZo7vOQZZcMhUGKal1W1vBWXhI7EAZJm3YweuxGSUrLr4OtY+bB + + GPz0MBYu6CYmvqe2vRJQ4eDmFpzTvOPc/FEbbhhum8pxOIoZfmRw4niBas6LnPU7 + + cqqJ1jn3YZKbZwwZIKDzCl8CgYANJXHu1pKtTmjeStjohgkqPr6InSy3QEko4EEW + + pcNdCk2Y7scmCGDfwmx4c4aEgHlnUQq0tm33G0i0Jgarw1WzjJLguz+mpXLePdDs + + 9mBit/cRuu1V2NuCD3HrCG54g/VNyhUmXI9u2Ksjv99J0aSv2lAhh7mk431TuwQ1 + + a7wF8QKBgEKYyNDgiDmOdUaKLnwZYi0UfAHZ9m4MzgaereIScyHNxl1FiRAkkte2 + + X/Crl2MX4eyLxjFiafvb34l7wAsw3I1G39WvNYDS9tI98iryizB/4c3YDWf7NeJZ + + C5iTznHcOf8+8bGuKjjEVUp/RZ1/v4L1huCqLYCKak1jFNoJyGxr + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:srwpg74natztaqqh2rm4p3skji:dvxhwilixw57pkcto5aviohrba7gbwyscnlsdvjaqhgvmcy2jezq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAr0Vb2oFiCV5paQeKQD9USqx9ZKHux2CWCjzUTOCGpgr/uXLk + + 67/XL0H+69Z3CNBk9mNRpOR4bDWlps9QL6axSz9Of8E6PSO3YYEKktyzSsMhQn4M + + AaJvN4RBgmOGcN1idUvslv7wbNtlvMfvqEUCSaylrgErcNsudn326/kkE2ARWfJ3 + + ulvZ6h8QA0iDKgnQsuOq0k4jQT+4XLe6RzXIubNZJM5AwBCToCZFUKQ9wuqKtbGk + + hj55NgvsKUj/EbBEaxDzjVoP+hdSAR6XoCXkCKHzAzdJNyLZgUXy5CajeOHFDsm+ + + gQ2ZjRhKVtAz75QWNy7eas/Na+I3zsJMzfVbIQIDAQABAoIBAAFdkQ03KqryhJqN + + dRGyPJyhUo/FEDMW86Ghntt4zgEUqbCJmTLPVDnuxxw8wpbREtGgQqD+KQRaIvp/ + + 99ALOdXhfiHSK6Xmyuq0TT9e1KRtjUCInVzU5bjBFnE8Mm5bgdpylzsHl5rC1ycn + + nUcfvy27mIXYxfxzhLLmdn+Y+bjkkyXJBqfG87C31Lzyc+08kYZQh7/Rx8wuXiqJ + + 31CbD/fzAiKWKWeKopRs9nmvls6C2xMdKqM/r1XI3Dyy4mDn9xzRg5/uSAZYOmeo + + vw1wvTYkPQHYdPZJ3pxQ7GMhY04Xc4sNtxsBlIA1I7MANw0jNVEZd2yMrt4luxG6 + + gFwUkL0CgYEA52BooMM5xybo0uKSNa85RYWGOepZQxPV3hz4dczIpuiPeekQiPD3 + + etWw7+nL9aygm7HQyc/QxpcfUGCPZoiwRbaL+94wQ7PMleOtC0ixxeLWQOS/UQ8X + + QklSaBEiUayDiZJGknQdjWlbhLyGGfzIU6pDh5TiS3fJuV0lA8E36PUCgYEAwexq + + UugfChyoM3ZFIs8CIjH5rLrmfFZG9RQQu5xKKjWYpyfe+y94TLIepKv2U6b7oeZ3 + + 0BnAF5UB6Bc2/MrX9UmI9yB7a8cloeP1eVzH5g1WISJfVKon+Do7eRTlGUb0Pykn + + C8Rk6LB5LFEWjsMTZc6AMpo1f4gUtV27fdJS/f0CgYEAlBmMvyJXMFeCfcHS7pP7 + + J7nhAd80RZBDu8l1bAmpgdSoSdNZ5x2+exyfBeHz0IwvvZji2Nqxevwuagd0op/p + + nKXNEmnVIPDMikDSeb+NMuoQVDdXEm6DZ8WA/uXAvuCazYsYqxOx+tsuXldByw6X + + t53rXbR56O6C66hoUe/ydqUCgYAFbUJEc656r/adChBBOx3KKy/bf5d3n0p5DUiy + + l1sT91AATYNV8CwjqVBmN1G7YY7lJvfvYOkZP9g/0HZ/eIW2nYoxsD0D9Ry+fQyf + + itMlQvZIExgr3F8l+Ss05jrLDEtFgTdQgvx37ohVjydcc2UVkkPQJrScjwhVUvwu + + NzaPWQKBgQCr1nEFMNY1EV1cucmhZlp5QOUhybUH0fqPfRjRp3sFuyu3BUOeTmum + + lkKoA+Rs6Yrs2U3OsEQxOl7qV5Ab350wiUhzqOZsCVEK4UkAWweeY2IlsyBybbg7 + + lSCo+6eJWyStRracQofwUwsXklCZlBcLAL3HVyH2R/9UuplVU/Wmvg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:n2642ofjfr5qljptdwjbwjz6fq:uwtjrewrev42yvez7br2574xu5vleallwnyddjaxqquvouv3dyra:1:1:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:m36gxdp2beqzfnymsb7q4lgmcu:2gqyjo4z7f6z3kqbbtfasnmfxdledtkxr5vs6hrksaodejunrdra + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEArJF3xtkkEXvoJbJy0WIuatA3Ou1SLV815+BAtobFPBhFO4IM + + f+wF+3TLsLgo1kvWz3OBYhiElx8W+ZBifi0iGQfAXQJNOerRhGFgdBONN5cXCR28 + + QUvvmmM8gB1BWfJRcoMgRCsGrfEJE7r4OQ1E1iPwjOr36cNvssiIT8LDeb2yQ7hq + + gzN6wDpFxt8aXR/weo0vjcw86A1MKby1zn36ufgiQAj42f/8F4bXHh8wGs7IBKBz + + 8ZkgwCaI8UbksX8YCQD/i8MCJCrlQMaIefxlhR/r1CVB0hWII9jwirbT7vviaI3g + + 7p6/s5Xgf3eB08ZTvfD8Kizenoh58DoZ6eQ8ewIDAQABAoIBAAE7ImsZNnAnfZ7z + + OG108VbSuGojsj/fm39VcrC6omKM28WSZmttMBe8nA1dKvFoZhZhwQ0FlsCLOLs8 + + A+/Ze5JJI16mew2MNsVmem0pjIrWeZQXkbW3iHSF+7MAQmyVVW5nMA48blZET2fE + + ICwsA48xf3BJ5s3UlpHka1CCV6mhJUoDhbQjnIOy80sOVExDlPuyh1OBXp0hsNvz + + 9HNykDeT1uioE/E3HEQ2Nsmo5YNXoQD1oBnk2aOZv9loFFGGVXLJXrYo9fJ/OmcW + + 3IVz+xIIaVomeEkM6CH/3yp3J8n3Zlv9lYVthpoR3PGdU58wFPD/77BUthLakPMl + + cNRMg8ECgYEA1zz4Pc9ldZepCZy3ezemUv48p589BX5ehbbpqd+csraacBLq+RGu + + IlnVfmqrXD2XYnFzWHxExUXuwWYJEDXQzrOxsgsHXuQNv1nEipSZhvpBvH+etoFC + + tROEmaa+9MA5DJe58OHW8U48oXQac72bNvB7jF0bF9Z3xGphaaEARLsCgYEAzT/N + + vtJMKAjTf4PknxhmCk3DPSqwAb988v+oYw3Pqwzq+45Sg5eOGImum9mu34Gwxecp + + PawdlHRBY8vli1KHJfKRkATh6Rd+8s1maiW6Mpcy2d8qCUBKX5Kne6sdyk6xIkPa + + gJutO1CPLUKFuKdxaFNpj2pIlo7D4TbHc+sQS0ECgYB7x3NXUIMfmiU7AuY9tSYw + + ikblet0D4MWJDkTYTWF3IS41j5uTuwgydwkhF0UO2djKY0YbN/PwoyQIEp7ZtKkt + + hgeFxXPqrSn+xigSLh0Qk7DkL1xdxn5PVjcmic89P6JPTJ5BGg+bXAvgKb3gm8S8 + + VpYmhZDEJ7FewnLc5RsbawKBgHaMXKzT0HLrLiWfq4QM1psq8RK6PjC0RlogOkUE + + LCdS7cJgIN6qwcMAex6/a5bi1JRqANMDP46IW2Bl225OO4s6gMLbXxR/oq5g3r9+ + + jP49gHyAvknbnVl4Xk46tpksPHlbEbBounThAeGVY6EU7ZbhXr4cGFMFoLPLLQaS + + BbZBAoGBAKKMG+MRnM9d8AlvTWeJF6nzY7H3PXQHFgs1ISINqE5v1MUJ7o+i/OWl + + rW6q9BKhgdxoQKEmaOSvw/ecS3bxoDyAieXBkTjbcfvETGnUv6JFCmu/tolHCX6M + + PHUyyYABqJHohWyLm2AvQTKcSt5zK2GCFXtZ9fMZQlHZUAmiNRpm + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:mo34r2meiiy46vq7uatrgadt5u:5zscxdgegy6z73ij5zqwq43mlqmko576fxeyhuqc5rvauq5md43q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAzD877AvjU9kwf7WSCxcTCtMR7gc2Q2F6GL4y0/YnnGOiq72u + + Zf9mVTfdfn8TcQT5h2dOYWyypEAxnIK3To/myFJ+1/34c0ddPBTHmexUpr2czzx8 + + wioJdG9upkW4tabxQU2xfQAYcs8sEVmZMcTILfGdN0vcSSKKpLx953rX09jxuaSc + + sbDOwqKvt3wBGDcRZRuJuoCjEBsKKQMhWDSzzuZBwF1xn/oqr2NagJ8s7oTpj+1c + + srfTXwx4oXdZmeip5xMeI/nZzuIYNlSd7q6NSAK6W0CRpiK0glK0ixOR849YmCGc + + 8Cnn2AAw4ABmLOXeBHy/mUHO2Kdfn+QrLBbymQIDAQABAoIBAASoa4Qq/ZHyXyKx + + IBsXJAodkqgwQL/2zOCcE8+AKq/sbhpcZB9eMfX/D718Wz6QVmV3XmhRNjNnOwpp + + SRIRAjpuy9w+pegbyEf1ZwY/B2uEYaYF6IggCnZTOpLZqQhMKJkskv/kB5VfXU9U + + UQP7dh+QG0hWd01cAjfsDDNXepe8Qs391Tzxf4/qlHoZrpYt+B1xItk254YrrPjZ + + kjcR5JTonutaPi26x6ULLS+VLeSGdFAFf22xW7eDPIX22aSsYJ7nzAWodRPGqBcN + + l1mgcHgpSFnP/TbWm6+FaM0eIiTad1I9ESpQdB1Gvw2uCNqa8sN2hLgDztkWH8HT + + +PkOSaECgYEA8PxHZENANGqVmH10WltFAbzmDMagGeLC+omaMOekdBNI0cSTlSTR + + HEeELWPCfRRo6En2VCYuiJGdi4vss6r5ppI6vu66Q68eMjB6+sozIA8CsarH8N9/ + + aDBG+Fy56/2vrK41ywS5L0qTMbw1lmRuGgta9eCtsYZvjGUyXtzgeZECgYEA2Pj5 + + 8yurZUZBhbQLGiL6qR2Cs8Z1HQpeGlopFN7o5EH7arTy1f3CF7McYrkyefnwAzCs + + JcNl+ufgVtx33Bkm4yNxirU3WlzYbtC014ERvdLbUdrKspcxmn1zSwrkHbg4gpWu + + qLtNl1OZGmpVFxIj27YcdhXWuaMRyKV3PQZFpIkCgYAtzycbDhWkYSZyyFZX3sWt + + YOUyRIempA6AZavj5ATE8+2BwqZzUX5Wq9mabz5HXJvcnEKxGFj8KQITxtOGC9hN + + K7rzFJpfx2gsDj8ycUFqtK/Eajx7s2Caw6KaD7Zf/+dnIe6j2xAAx2JXr/lXz1uG + + o+X0m3MpLe8CdzIuCjq5oQKBgQC13AIMyxaO/VMgESeZEaaNpzmNG5O/8pereNSk + + NK5528Ay0VYU/Ov5V1w8d0QSruZ4lgxEXsIUitQjmgkwxzgr++JIQ9oQeG/EelSJ + + qRpIw/qmYj+xbz7ZYbsINCm9q1JaScGqlcvUQfK7DFMj0kWR+9NhOq7OzBq01dPa + + p24qGQKBgA0qtgklc9qaDCEhNT66KHDgRTrrBRNf36IAWD5mEfb+mpVMBYBiq1ej + + 1UIae8DbgJTzLNHxlBtFEpCB8TM8xtVfoW7XGWlQaIRK8Nr1VvmhmsCQVnhK4ZKd + + p3IMoWvoug6cZpr8Hs6c7j/u5zdwbbYA7/mDRer6LoqmA2pYYnpw + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:nktoeeuydph4acj2fux4axyaj4:g3fvjwanenwsgdcn3oxnau5gtbdmzbnbevlrzrb5qe4yukuwhejq:1:1:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:bmqbu7cppakl53iwet7rwxdkc4:hc53hqy2gli66tvjvnl2imgg25zjj4lylooxmwjghaxrq46ch3ya + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAq12cz/r3Jv8sUPbOvXlldAhifcEj72eE81sugnCZnGS67pvm + + d8PoyNgMlFXbTKXTsxeDVcoOdUcq3q5dxhhbKwQVt9XscZJvV56zgDTG789tcmmC + + NqlvCnoXVXThrj7RU82qS8V5vez1ovaVo6tEnZnXHTJ/JdrLl4yfP21W6nz0YkC8 + + cMqSZPCYczfq78S46njEulLYaEPxV82Rl4ffm3B24l1Pl5SmGsSsVe4SOBR7WFse + + JpZB13p7iBzuMT2SIQdQAkIE4ILDCo+s86TSVFDRfJpbFX1nD1dntGSUmtvtIjEf + + 5uiw56hwZ6Xb9tiSIOLUrPHMWZLCZUYNfqRevwIDAQABAoIBABeK003BWS361XBE + + D+/42wa/ViSXoaO0sY+rQa764CebsRCxy0491F+vSr8gMnILwBM1Ej55dVYIUmvo + + QYrC8tdshr1MPuD1cKV1cIyW85OjiBI1S4XN7irezhDX7188Uw6zzQb+2LROdwqN + + 3M3w7ArIxURGGTCup9SopYIVt+Cb0yRM2xU0Nnuhk2CPemNwcfzulxzLOoaNT4eV + + wxbhJH9xiutZY7+gk5CFesouMgy5KvBCLGLw8osMgdBhX93yNQULknidIA4Ko9jQ + + 4+4sesH79TmQWg/z1LSV1XOKepOoZzQv9RY060LRQAAzdUV9C4iCAnKAWiw3mzPz + + PZ9rj/kCgYEAu8NbvINqFTuQ3iy+xLmDygNYZ5scetnZsxMX2JOGb7DNof0rH1AK + + YjGku2xxJHta6S7uXqVhItMf4n17eUpb01+Id+oeYgUb4BjTfBW1sThv+Wl4zKvu + + iQhrTl3AO0K6UrPYoTMx2pcXAfEsy49YL6zYajnPwwXDK3AQijOmBNcCgYEA6aS1 + + j9r42626zK6ZtPpy4OcjbuytMZceyvz6dJnUKRYm9ykdWBmVHxKJZ+a3VqihaYS0 + + /kECd6/HAQaPMgR280eDfhVHZouKi442Jh4GiC5TT5gGzAEuoUgP4aB1AQpd1D9t + + DwZ0iAuLtRQYNN8j4+FsNrcCV6xxrS1LpWwy0FkCgYB5bspYrCEipEh3+DZUoqpi + + LzGwp/eOWHBcSV/luNt8RrtnJYYLFUfx46tnb6Xo80KDhs+xNIIS9LotT/xYIEgs + + 9x8adra5rBYwI747BQtiF18LzjPLIvL9ew1zPFzDts8sB5Z2AtceSRMfNWxEJmvh + + QYchhEwjFAn6gNqhlu+rNwKBgAwoJ9JOYHh9t6SCyTijd2rAXBWfdvuHk3CYbSe4 + + AVQJ9QkTOJWm7x1ox4GCfbOinpNw9kHsfAZiPQaOotDFbrMF24+p58csJ49PXP3q + + vghD8M3JaUEgJp75sunYgX4GXg93JWOMwG97uk83tnK50ZI/3nOSXirVrCyImNEI + + qjQxAoGAM8Or1b0Ko1SQft619DRfKH6pHmGcP19ymidhcAkjfvwhJbrEkoGtkh/2 + + TBowy9QLaHMnKIPnkVXGNWij5RidLxUqrg8GzdYvrKC3cDOZidr8GNwIKQIaynh2 + + /TM4NRU628hVBPL+8v81u4EvNvNBTgxuRpn2CcI+nVO0arCHg6I= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:jg47nspwliweckiaov4ajbts6u:yegxrkzkdb4umh4rayql5rwybftrtnghh4g324cehqc333ryscyq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAo6KN758FqGA+L30E9U8AVEDWqCu0k0dzFt4Y6Njr6GfYLN3a + + PeeJcuFQe4NaohPfderNWlDSZ2rRDM0Ftq/MQjHlBCkjY/PolqQDARbXrP7rmDsX + + zyhG0sawySrgld/sy93UZVCprF3Lc9/CVNN0iphImfpOPNtH2FsN8ZCqi2fyuL4D + + dxzVn7VfPOXKWx3OE6p8ME/0UpwEwAB/W8GT1CvAV43spMxcQIAmANpXKb0agIpG + + 18WoEI+kgyIS+evPQBC5pXRAmoeRgyPVnNZAjhFNntDvP7ZotLJ2ZLAsu+Z8xy/R + + TWe1xGydtj4+4m4lMT79VJH3KiGtggEzr1ETMQIDAQABAoIBAETFMW+uXntYD2p3 + + 2VibXiEKquw8igSHt7e5mbBqUiL3WaPpjSoNH/f295MhLjsFrRlql+lIJFUwUDFY + + DPmtQmPjgkNQYr5EKND+lwCjL/tVm3/7/dKjM7irpmq1KXPzixpW3UfDMbvuI25M + + cOijgcwpmgGUb8MlyTkFc4O9b99sIRrR7c+Zf/02tPPo1gCXIyEBKfVoUBDajt5l + + ZceA7hIcFjlUUkdR9zQbEw3QaJQ7Ge0AZBQtqz7t1UwvhLn/+cMD7MzQi7TQpDQT + + wO778XL5Wm1TgZPivT8t8bvvo/hwtZdPAXOt/gvXJNqXdD2kDjJhWxXI//YSrDRi + + 5VPVgu0CgYEA1siNix3V46t8B/nfBcs5kiX2/pMTWqQePcWjVQpOGNz4PT6e76UY + + 23+urd96KuUrn3d6LdJBrsfEr4AKJGDBpETKZnUgZMsgCQ0mnZIExxXYBZ/OpeYw + + qG8bvB1/Yldtq0Y+14XxgC8/XJY1C1Plyl8Yh17NeCA7htuir1Vep3MCgYEAwwlI + + ycE+P87Q87+hmO3xHnRD2EScT6+jVtIr+hSQrbHoqPDjNNgHnSNbRzbSvkeG5IS0 + + l5IpwcDLSiGn2+u0AiaP96rtyk4fiYhKX3jis9vanMi4VKORuwMJuIECMET1Aw/l + + NgUlRlxnYqmQjOBn2ArcSS/UcrRAyfbI57jTycsCgYEAgZjRjzeZb55xYH6sy1os + + irrNph4od3C/rpYqT43AQdBTGOFIFWGQ9iC8zb0ige91uurklfFgII35Z8viUsDv + + FqdLWTcjLK5DzjJZMoqAx3+usPYUQpX6lic0nPVPf48xZT8le/YeGjJoEP2xU/xz + + kwB+VHAnmmwYfu7X4uOoEXECgYBz4N5IUPJFQwHO8Lp4fFbYO0fcBNfCWJ55hSHv + + 0awsJxoO1iCIUxoi+NDQvPf1adXxjA8oRwVcQsoF3302IxKufG7pPbtOiaAfPMTD + + eLVpG2UF5hPu5cg+Do4F+1BrkWzpRtZuhBwjc99RNWHW8bWBHOLI8QwOop4j4OZ5 + + Fs1uhQKBgCKDVJojSw3IOoDC66KAN+XQfZ+Q/n5pEElbaUzoOCTg1q+/4mX0HZ30 + + 9AcIaiXmWAjMLmOcihMMm37yapIIplhF81Mkb6cYS3i7boFCa8Ioi/D/ryxEt4HU + + kOZqm/l1lQixd99wjf9i8ozjxFMop4WQdNCNzW9ujyrdBrPtKtYx + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 1 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:rl4bzmselnuezmapjlzssnqg2e:p7kvin2fnemochuxsmh6ot75qpbfhrscbxi5i74bhqdhzcy6i5eq:1:3:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:uuwofnazzi2ehgwkbzwflclpt4:75jxdbmcilhxb75i6jakaqfne34gu3csvfhem2iqkkkzvcqnnwsa + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEAvZZfYCB6QoKGf+YkZVpLZrQw23Hhl1UboV4nXgKLzfCljmGu + + tBTspcr6eWSm2kmZQuYVG6jZkHePpnOhTGAtbPI1EvH855zUVccBhkgtLok9WSoZ + + Nq9Z0TOdgDfvtB1MKeUq02EuiwgAoAU9j0cs/uL9upZn2wlrahwXcrZcmoCstppV + + P/Zi1E0kQ1WvwJlQAuK7i8UsqwOSw45jNOkTlN0nnnA5UnLbPuvg0czEEu7EaqYu + + CAYMl/ZyX9V1U8hKw6lmtYWKpGBoR5kJowBGfYhZM9Yr9czuYxbWi7g4ZcrgDusJ + + uwq8TeVpAne1CYhZZOh4XNrSzehmDnkcqhYHrQIDAQABAoIBAAFj11osksjnDRZl + + +RFXKqNbodoSCS3jXVr/BjnduemuIICdPbsrRhrnFJQMRV7nWDzR1AjKYaH6Bm8Z + + fO7C68JXOkVjyc9m6nWgimXSJKapMe5z7RBmE7oBb1+vyU2gQ10xRXGcTkuNqPeD + + YlKpGm7Z+jNChAtqk8OI5jEcniwxzxRVo2ujm34LLahbQbw412yuohwhkK0m3kJ9 + + /nIaDuNhKaSqrAS+n8gflIvpFY9yf+k9xWnPjWhW9nLie86Y45Cn46Mw0OU6AHSo + + qoSorW0BUZZhRPIDsW1B1YINHXOREtxvqpMEeOat68Q1+UQCYJrgMQYgrpMUbKzd + + 5JoRZKECgYEA7/nFVS1F0a1U2ITvmF7p66WT5unNUFppm8jk8xPQXcC8SX+Tl3hc + + Bch502NgKIchDO0C65/EgQwY7Cou742iweagQhEDdojbBxmQdQXLzkJlyzxCh6YG + + b8hWzfc/TlkhgJToqvMvF9mPNkJjo3vdbqFQfee9vPUsuJcH4Y/H370CgYEAyj8/ + + J1nNACfxy5eNM6FPriRFFcHXdrR5PvqG1yvAAgyTZyKwlE99pWF5a7zwfFye6GDF + + RlwFOY5U+rP0ePG65Ho6zTlxyG4oC9mF9JuAnKEIIflAWudG7OqHJr462BrEURYZ + + RizLb6DrI37zlORvL1uLPr/b+okVUJuih5PIDrECgYEAhrpZ+ZozSqbfrbfktE0F + + U5FgWhIFfQllpVrCf14ua5RboYAIos+mCnElRHLUd6x198XRD+xg7HqYO27rbv67 + + 09ThQHZA1Xm8Tl4h5jFc3O4WLGYmi/XAQ13crkITvq73yjLP9boWRHOWncXkHtLZ + + 3NSgVi+XLNERTIkumYqZkpkCgYEAk89ff4nw+jE3VR1A1EALtPDLENineRjzF+UP + + EUjnPlgkjpbayLnD0U+I5wWiGLG0bY7z/rUYGHV+g+9rN80rUvpF6WEXWG2xlN94 + + OEpB17cU84dv0j//JP1OozEaXoBJhB2LgS8Ry1anIz0QFnxRCiJ0hPrBcbwoOM5W + + HZIS/zECgYEAnyX2uJ5Awnef2hAQH0gXNfnHjcIy03UJOLjOFCH/z2wJEPXZKzYD + + HXimoiodVWyjAKu7HzAwCxfp6PcC5l1llevJFjIOLyG+MrJ1JOKi+EtV1ETZt0BS + + PKkxMCV+ib0PtLyC457p9q3XrtuaAuEH9uJNkv6+e9eg6eS/cvPWaFE= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:tznn56mtthkyxbrmiv3q2tjlja:7upsseycyxoyeoals5xnhczxb3iopgugggwievjibkc5duezlb2a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAtbFsdwrCBiI+8Hh+s2HB6/6N2wVgjm7Nivejr7FzjmK8+UgN + + DVycRdnygdzoEybhzXImonLw3bJh55D3BRK9xlIsXFLDfWDPAyr9NZW9316GhB5s + + EGnvvM4Vr2+XW0X0fymcOKunwaNTQ00ps3fPqyepW/FLUuSrX8wJNuEOR4U4/vEo + + 52bmxq48oYeWwd7P0gMR2q0eHydqA1sL93S27NwMR2RaRV4s2gxTZyrrG493gJhJ + + g4xAsXWiieUboDccYrZRO99zOAB2vyYb32gUh0vs6xlHvSFQpX9IEftdL/Vlrbtq + + 4y+pSPsZiJwCwJPJQqMLU7OksDCEZzJDFV04MwIDAQABAoIBAFrFjJg+dieFVWdi + + 832f0beaoXkyCwatoZ+TT6IXZ9FTT/DER80MnwAgvhCV8hWbX8T5igavoNlJZLNB + + T7+nmMrrQ8FOEd9iDZoaEI2ERWtCOLbp0fgzTLPJS7ktaXMOlHMxMRx42aMaex8M + + /k/shAIQmwJVntmHZ3zBHTtfHXip5EbdX/L36TAfCBjbd0ArsFP6YP9F6vP+VWok + + HES6wtixAX+ff6MGmU69PYlthJYWXrhS2/7xGdY6Ezdrm0GEvn9GviQqnS+6guSA + + Rkq79eFG61mq+Oqd0xEe1wO5ul10xngH70NJ5xQS37mio53Ijcmgv4SH7GsIy+86 + + 2VspYW0CgYEAxizeJnFH7IjugaXoPOUxz3nXm/Cq+ijmwz8pZu9KGQDm8Jf/WYYP + + 49uNeTlfEPf/qVHLkzNVKrHSqaxubwrOONf8/I6wqe+QGHO4k5elll2bI3wFFdTc + + tPT6tJaq5MTdySfuUrbAx4WC59m+2Z/M4N2HxTXBPvO+AAqZiRLsgx0CgYEA6rVh + + xCOIKLRN1fduW4C+FuKAr5umFnOiCRya5gDwD6WY1jPAaSbfQVc8INAVV1NExQiE + + oMAmEOrt3HuYxEoRSl/5AAXWoVN7Qk6b20jtOshEBKkqk19Ew1rXBkfzWfVq9+4c + + 4hrK5hRpC/MIi5tR8AlTM2eDvu3/WJR6uqCL948CgYAQaqUYgCfaI1nGqay8Zqwi + + qNBAncY8JOlA4VmXqlj0C0wWQDEqBF4KnSRyF1uVt0WZjCoWDpmOiN6PqbYYQsfk + + k5fkgBmIak0AiY2PxG82LpjsbpipP1HtN6IRFa4gd2J8CG/IsFT18kxu0m3p7z/0 + + nMVjg9l3Uo+5xycC4OtwzQKBgQCktyBijvEaZ9cMJzZanxJIazMWiqxXq1T3Ag0v + + B09yG6wT/4O0B+S8LWV0PbQMcdKcWGsDiXXtf4HorxC6CKTzxkCwJGjJFRY2pYY5 + + sYdTLoKVpsbLYBuY4eJvdQUyh8pHLuM0RstIBuDl0uyXVSx+wXyTYb0SvGHsH1+2 + + I7+2vwKBgQDBAbeBgU7reZHXa+LOK1McFVazYXCyi/CSjDyQOtaIRJpfoU2dHQfy + + 0SpcXb6mWC7gAf92sT4kDXJyts8jNWkvgKhifhtmd7TGSqsdNdhdc8yB+Kl8SmjP + + AOLOXs2hS6NMCDlmQDBlEyh5/NHhUVyN9FCEt+6l0qjE9gS3FyQAjg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:ycvogzi6wllnq2bkx3t6zdtwju:um42l4yen7jiwdfgirvedtty3tt3xuhjiyxzqoourvughtxjar3q:1:3:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:i5hhjthb4gsivkzvch3megrely:hkqc6eypopec6otxa63muh5olpihrsnj3ssnq7whrwvc4fssoojq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAryhP4uLqtk4R6BJnXYLo+rwmWCcdec5O7Cg1ath3Gvt9RmMb + + vVVKwTdC0ZDyqx0+Dsr74oUNXA1oZDr38/3Xk1OLJmCcb78V3patv3yJxOiz+jvb + + wjKtvyg14rYIBoEu3/bgUPasphmEbjSmUEbBjfihNr8e0bi3OQjNNlVQgLUyI3FO + + 3PX8awmTkyRSubAFfRxOjecxfqj214DQB9j8F6LrsgGSna6IaNTRBI/UwtOiNOPm + + sczhdoctVRZOVzKlwpjickL15gwfdldPsuSLm1nkqXfoW9n0zV9V/QwyXJCdhasT + + mIoDN6ZPHunL2XDRN2IFjholYyW4cWj4VYVnfwIDAQABAoIBAA73K0gv6iz0Y6xH + + 8kP3nO9bZw1OHkMbgPvFfbbo0thf13bNnf+hy3bRwWhFca50G6rI5heXFaqhTKOP + + tELJFAO29iMrywHzOiugBS1gtya3WTVOqvqfOOAlz+DUe8AOhpJFNipEwUCZ2opN + + /k3KldwK+79BOiFiHmmFmn8DcBLnA/iI08hKJRRUOtn51kVe+MPAZkETXQthMq+X + + NgJ0a6kfRDV+7+aQZfhdV5raCB7nK8LZsm0NzGLvtasX944XxFH15kKXaLkKsvvQ + + zV7QNeiQMfshxlLfCbcgA9NVsByYdpJOfchx2WD+L/ZEpIM72wVfCIzpqkXJTPGi + + +Rqil70CgYEA7fgz0pOe6mGElk2TSQBjcYjGLrCGttyKtl9OCmsFgOlYadufN1eq + + Ahn8wQtuEkQRbf8t+0bMCZ8/XU5jlIUjO0bIDgZ4LDPOckV45e19fnqkCeEnlPnp + + NAaM0SewY98gsvjHuVl1r9m96pVzlGiyC4XFG3T0XLSzg7EpIIKey6UCgYEAvG3F + + BqXU6o+BgamohqPHDR7qY41Lt6f7XZ/o0WCkHJZq/2/JFycwmHgRU3esj91zbHcc + + 14TeoCsIPIZcSdqA3rwtWolLrSuUvvmDfmKCkEgAJRsHi0oayYBcHE4lW8UHWcVT + + FYjc4JkcK7viZXBRIMEhwLPk+DsSjX5CO3ZKDVMCgYBpt/l11IUmBRq9F0uWg+ip + + 2KSKu3utoz6wlJh8Al2YjpHrvVj3Yiex9U+Xh3dn//tqTZJk7mfY4nlo/1k38wna + + 3LAlovQiVwWhOIHkS+STmvJjPTazdW8H4N0QUjyHsem5+NHp4vdonyhDHhAR340x + + l0Ug1I123gRePgdSXRUkzQKBgH2DCMiC0a5kZLl/zzfQBBjjTPF+/r6Y8EDO8X/2 + + RZqdPyxiw6neeuo0oCXfA1zY/7dyKA4O/VPnFhdq0DKJj2nOIs+5wGTbMLt87G/V + + Im8E5sPQm1fWxr0N+U0JaK0WMu1DGTKw9Z/NnQwsnINBK2kL/HWl3pDSmGsTfP6q + + rmztAoGBAI39m3K8RjybR/46YG4+4eOOFeo81amjSR1Pf8o/SsqpRpqqCzcmGWBO + + hRbA04KNjgludOcMIV0LYAWqy9LKfaHKcbhdh9Q0PL+VO/fJsh/NljkusRxHxTXj + + /bIeG6yEqFtg/MYe+zeYUZvgGsZP7+7Swbp1ScexuyZes9H37v2D + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:n3gsik4lgjkekhb2hnvkhiieya:35q6b6riggvqzsmyso2hldyb7hklnrmu6farokcj6d4nvmufqzja + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAhaXFN/J9blEqNROOLhzzOY/yy5wAQgNmBtULXPLgYffFop+K + + bfZcedR3VTGArQAz2eOm4KfP7BNSd1udZA4OEIvub98O90osuj3B9cFGE9+P4jv4 + + 1GfynZbUnBNq3s71P1TqXSTEJ8DD1L5HFY9coRXSmh1+TiEwhaGDKsBWcMMRjizm + + AjeH5hzQLhY17NLjP1215Mmw4T+gXUYWKfSR40hfXOEx42uz0W2nlMHR8vcDoz8l + + UbV2xCBmMa8m+vl+UwK2rLhjWvkZZP2o5hpk14kHMYoLSF0U2aQPgP+7rLCYYlhN + + w+ClF4B9Jixb+Zl0FhLZeJ/bzXZHdY6AKPYhDwIDAQABAoIBAAOZgpWDrqov0yBe + + gvgDUppsd0sm9qt7K559KChcPaaV2wO1eAUx21gdXLYgNl7dKwha2oNMMcxM0Zii + + ZeZXKed7MAm2VdEGSpcc6Qz6pC25L0cWJhkT0FPl8fBe5i7THzA8qW/8eLC4v0Lg + + ecn/Ca0oXnrv1sI5oEobyWHM5WcgZ/EFWaixuz2g2O12pb23XSXeoREg3Hq6UoqH + + 6w6CfeRI3rXyN/E6LOywHv+gDll6rBKilBBOrkwSwoTca3QbZEf7iW7FC42mI+Qt + + g2T+T6MYgK81hDcu6zpMY67D6ZS5qZfIaDduZKeCabt53BTzJDxSKqeMVjCb4iqA + + RDzGEmECgYEAu+5FThTnzfP8K4Nwuc7lbUQuU/1Abpw+bc7vQ9QWE43sl++YIpp/ + + CJLBiGuhW7RQ1fjDk16M8phBIyeViLkHCkbxsUkmurlQIHq2KOGAvcr6Jxnhb5mM + + crsk/QBW3GS96x+z0q7ZKNM9jVSqVhtmZ0nMzZBPv1VhNKxTEMRuAS8CgYEAtg4h + + 8QQ96+FW+PrcUwuQ88KC2xAVBt4J7sa8sQ/QLJHSXWnQoSSy1CmpJVAVUpAB1Dw9 + + J5ypVcYNuu/DFkoK9Ill06wP+vSc1RhjW/ozaZgzWIIUpC+54G0DMj3Pz4BUL8tO + + 12RqpgZfbI8rBXwURuldtsTCC46TR/SzxkJVJiECgYBnf6DhkLfdABsH59qkKiLG + + W39cOCRNBnWHSikRZPNHj6kWQBi8LfP6R8CYHhZ+h77hKKClP7RGQr3U248J/kS3 + + Tzz6kzvmJ/rN+Gbr+s1JOUktUZ6LNLhZ02FaiN5NgJnrrMj/JdZpGnVSqacpxutN + + xSIqr+iLijz/okwY9uVSdwKBgEzR7dSLm61a6p4pDKsmKEYTf6/8O0MokjxlM93q + + 9Ea6SXANZHF60NLhuXP7NOQfzAXIXW3Hl1SQO97zqPhQygqhp4wIAL4+Vac9oT+A + + dg1Koe/pA9i8IszmcwDSQEwotF1uhpgw0Se5bK6cQuUPlGbPtjGXGOJTiSZFxU4V + + U2TBAoGBAIYIgp8UZtxpIfj+u0EJqtQGJFGgw5UgqOQLozQ+OmWxE0Z4jaCgxhj5 + + TW2b2rNesGN3FlaFrXPW7QXw6caZ3/C5/KWcmpwS9gESCJWP3iEbJ4q5Avh6mxAo + + 6KnU5ietcfrDZtjb0TqLo786IHndR3aljbqjZzWvZS7yncfIkpVg + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:3yjtuv5h2g45g2cncg6hka3euu:bqqhp6u73ldawial7rtrfomx2qkmboyvqve6ywo2jpvfbu7zptga:1:3:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:qucnax3vhjild5ifkxf6uxl66i:26feb7whvq6cm4lxyajiwk4hv3cry5ongo7d4h4vjpgskvgmy3ma + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAwa1PAiv93FgzQ/4f7aI2pEWAyJkqtC4cP0aE0ifKCZxZ/M8F + + xobPnNw1A3aWrAdOC/4iew0y56SRdejGPrrno7d8eDwwc4qV0LqWs/dGs0yb3/KN + + MW5tXzi/VVoo06eQX17YdyQllKqf2ebpkopDYZ23sOXOY1krUFWclGGSlmrpP8J0 + + arLxeDZiWnzE0jZuZqPliQmCozUzPSBbi3cSaiw+hjYsEdt1ooGQcfBfKOwCx+HW + + jjyjck5rss2jVogEDgfo+/HgUwkoZ/h15YvMSt0PBh0Suh7R79P+WXl7m0SvM5qr + + w/xSJKpi+RIcsLOkU89BW+2DiGM3ZeOghnlm+wIDAQABAoIBAFEiBt0EDL6HfEJZ + + bIqhz34VV5OxBkCgqFihc/aNkIdiJhhPqT23L7WoUdT3krrR/JHtjgg6ST7co8rf + + Dl0s8uiUbuH3ZNyiC4x6/bK6PbXSu+GevCMe/VZMcWqR8FRp94LcOpX+YHfc2kXw + + A5zNqthzt4W1XzYjHo/yrTtDfKLhvwEp7NciJL2cQ9DZeQAOTbASjVd80Gps1ZLT + + XGgUpbwm0AzfpjK/6I4qtw2XlhlSBesj3k5PPHqNB6H5ZtRPUGFKeKk4vRl3TRdt + + XdKWbGtawWe9He4fpGc2BMbNE9EScs9q4qZ6Xd+90bgGN3pa8O7xSqdnHtlujOEr + + WwAevaECgYEAyWycuheE2nU08iCxicgiEzJd9L6HLhBvyeYoZuhk/NsSElav+7Mz + + pzWohc8sv50lKo9C159onkK6u7dNqTSZezoDUn2GqrazsYgRP7LPB0jcF+vQUK/D + + E2gC2ZrTutdmaCr/Ddl78x6v5WLlKrVEvnJBP7pd/XmjuVvNQyDrQFkCgYEA9idS + + bitt1aqndeKAtYhquVL3xJKwqASKEbWfxRYXFX7fRqbrmCGT6fg4rs2rn9YAB9wH + + ZnQ2e0tZtG4liewD3Omf5nvekkvSHJFKscm9NS+XLcv3s4UJuCnDpDlmJyFRXSct + + UuVAYcOImpZ+Qtvy+sA1IJBeNl0Zgo4fbUWvl3MCgYA8PuI5vuMbvEbTzPeNMHEQ + + sNXtaDdijcQB7XdUIFpkTtn+5jLI4/alIqV/MFJAFa6SJjtl5uYRv/++Obteyr7F + + Xrqzp5vp36+rf/k4xjCqCx7ZgMzT9V4xpcCEeYyuq9KTgZi7+brbIuiVgZjtxz4C + + gIYHm6SVNhbEUDL6yxPSMQKBgQDqkfxOelpXlCGzCB7pX098vaDZFYT9CB5e0/qm + + APAMjvPMy0KVneHrw5yYj+wuC+vJkZcHvlUw11Rryc9CCMSBn6y+ImqudUyL5rUM + + iZgh9/EUNlwdGflyI3KJrB05ytlTcQMTDN52i7RAxIsbwahh5gp6trjhC4VE0ZUH + + N7ImGwKBgQCM1L+omSvZLd3HyvCEot+EV+bzUsoExDK6+k6a7JgPN3nH9ReHDH9I + + mTRuonZ9zNdeulse7E/7UXlHH0YtgC+XeMQAjiiyV29HuycYt9NCdF1xTrV1Ao3f + + 2Hc2JrmHgccuZP9y/xYTgXU4qD0sOrOpDD230dkkt2xFujfapl2PoA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:vspwhm74zz2ffbihu37grhn72a:len3xv7moahbuptdlfzy6otoguaybmsfroeaonep7koan6mcxzfa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAtyEYblHULHgUI3qeiIBkJGYKj8bmbIKBz9VdtYWbyp0Elvx0 + + cE9QcLFK25fSCACviocH7Z4yNXPd1yamDPVhFUjcI0J1sj4UfgR27iMYS6rJvHMx + + Z/KwSKz7TW3eDPVJbHl4Y2MstlQBhkTbzzve4XCK33E9d9hMj9OTfgG75XP9wdOl + + Y0tBLoQIPRi9DzVqPMg05oV75B5o/GOWCSzLCTdGXpdDsbFsQPO6o/nNDUvXwVM3 + + 8yxEIZW1oXw3+dmbmKnZi2/RjHvRixzW9JjwW6kg04P22ehjYVRyqAATMoaTDvNq + + S7q1JPe6tTpBGqnhoFjQH3hHsHylhAyXMOf6pwIDAQABAoIBABjHnaqv3+n0haUX + + XoRR+zsBo8Q4wc1FC5O352o8ngwYmxpjJs5brSLSmrKEJKN4lEhGZUg988VP3GDU + + lfuC6JQcu8z5nTt1MwiqSf2HOi5i+dFKNRE/waLT5V1g1H8kYb8P4L5yGQbC70Hf + + 525vR4Vx2RjLFeo1loaPtpGCYo51nOJ9UKkaQZ4sKVgNPL1K/WVDnzmaVklz5R2L + + i2dV/4irCO8HP1ZUagV9JHVpGUT1HJDzBGaVF/3zmFa6hrOrW9KOVuhc/KdybLU9 + + Zhk66KM6fKVgtGL8TG49O99nhcT+jcp+xyzKq1fN6V+dmMFS4PtVXCdLMRfaV/5S + + NuoLhgECgYEA4zPbX1M3hXsH219AvASkDnaQKio3AY18T58XMt2+laPPEIhFDaiY + + J53or7IOfBMphwX2+V0LqL32b+x4cbMTnXN4tUomLVZnvJKA4+1Z3qtTf6xv5yif + + kZ1w2GFcG9rvqCdUnvandkQo63FLWsRKXG4zYXibXof5izSbtMaM8ucCgYEAzlcs + + QqTzcCujrjA3Pr7Tj7qkdJZjCPOce3k5MRZfzqpE8f72OkMwHw3DR2DXm9vP0yev + + OrrN2u0LhK/3fkZAhcTTkUwlH4WqMLGmIUGlUqMyLvSUEW777qzcupbpGYG6K+KF + + 63Ie54KpmAaly7HWRhWsM74XcY64dHlopnpzgkECgYBhWq0bcZsO1SMOuwgQCKUL + + lX48sw4S2j90FqVoJGAv2ps1aE6+hYl9IEq+TjuqqsNWmhWz0EzYp11bpCYQAj3b + + b8k/VWB6eNXGlbgo8mFZ6mvC/26LzHpjeOULstw3C1853HCEFQi4wogOKuOxJv7+ + + EDJwB6/7l6Q0I/y8P3/R7QKBgArb6ZdkSO95THbpUK77qfShdPAxzep1r6GL4qej + + rs0YhuJZcanlSU4JEmLaRN6N9eT97KnhlN3VpcqI3DSIC/M+RYgbAsUi6q7/Wmfb + + pZCwx/5SnsxAFAAelss3D/NosVyH4lZeviOe67/1cZpDtKwhjdt3QJKYWTq//PLt + + 9NBBAoGAQ/Y0z+5u7MhB3tW7o/CxZWdlFWDJ/qB/fUMMcULP3bT9Q1JaJs/Bq/SJ + + MhgeCsc3dR1jmZvgvxsosuvNHUvBhpksoGYtJvOERBN5DpQk36bDg1MP0pye/WYX + + +hVtQVrSOU5JvQ5fWu2zQLDTHLEXPaR4F1Kca8ljgFfW/Ay/T4E= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:annnqmu72p7iels5loqwlxt2zq:s7wv3jfi2hlpcvp4dnloc4eex6vre42kwiel46achaie5n5uodqa:1:3:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:isonfapi4rlbrp46a43pqvzxjq:xitths6mep4ltlbktkwgzegtoaz6efeko3d6pvjgccqtirhzzgiq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAttp4OhdOj4JqoNbsQ7aoF5SUk0aIkziEJK0M7DRCqtgU2c5e + + e60BpRd144CXkfc3uzAgEIOTt1F4MtXAWkjki5Ie90pF8L1/+SjOdPii8IA5BHis + + C+ydELjbQY85z2GVPvCwB4VR0aT2GsCbtDaeshZsUn+AH3BPsUUP+fXJFsIGtkpr + + WpC5pd/AQlrlYWj3tw4a6j/Fh2Jofez1ShDoHH1GQ2IP04ekWLza0lrzxNqQuP1n + + hPrGhr1+kS4sOLM9LYmYRrmIcIUSF0P75EdFbmrSKddENTk9PcUSauOYxpvdk2vt + + HFuWBp5i27YUxqcEDKmolqoKhbh5HDmdjslOWwIDAQABAoIBAAGOFLz/EGlNWqAe + + M8l/oX5R19GeJUXbPS8dVEwjRaMzoznBn4a9ueiFgo3PZ3qTok2yjb3rizNhO1HI + + r5IU/JyTPuArftzFP8lb/NAnLSY5G5hbeQXA8ApXCBuj9CyR+orxJmNp/CrO6ajg + + lR0Qjy5Eh+H2Y53g0/dV9wTRKkdJ63El2MVjlTgEKdytMWK8S2RyjbcOKGSMgvvq + + vgw2k9M7dx/KHVxGbqgVHefSkfUFCQne1wEPJS+zk9eLRcJEXP1MY4JgMbpMnH5B + + m9BVhPvCocxfjCDoU4CZW9mQmsUx/J+De3icdIOuZsJgMMBJ9uV9e58x0lStdscL + + gSHlccECgYEA1HPUIQ0jat2cJe+SxIwUWqpbjQQN4Gd1R7QtC6UqH4WXDDCe4wfD + + K3OpaU45BNm2VFNlozfTIMyXRBKM1SnBi3040TWr0TEzasWcneuCbhdP0VUWS//R + + L2rRpThtJeV24aXWP64XMZcorMiTSPBqq6f0OksExzSkqDrhVckD+30CgYEA3FV3 + + 281DsFgqPhJMFJ4NNJgNbVA0mSnsHiQ10tnlioOgjRhRWGgI8Z2GSA0ZxDxyS5kX + + +j4U2u0+UsiHoa5tv5/CUgutg+HEH0PTvJ69f8kyLCinBD+b7FPHvLJBAzN54/dV + + 1mvZ7FWfdgYlCNxWcSQ6bpjDLy7gAkEP7lNJKLcCgYEAwbB8FEnrIVG7O2bIswJW + + yDYKU2z/zbfk16Nvce95kNV1WTq2kJsSF3pSWFxlZYOrVAPYZM7PYFbGDdyvouN3 + + vdlDRJEe/RBTJSPWXq9I8V+1eE6PjmhC6W0EhxIDiIpEMQLFarcoFCEQhz4x8Uym + + o6ry4XZle8wF1g4gQ9qJE+0CgYEAjfdX8j0w9wfnt/TsJoCr+45ZYGzEZ0fWxpkI + + QSJ6vyQOp7radv8ZfCzGX9hpGMLl1gX/qBKmN2WTuZ1RnwCX4FdcyqaRl585UffP + + DwKtERAfDsrmylr96WkWEmQ8dYaObC9qlG0LjjahN1fANxRZci8ooyg040rttSYc + + 0K/DPMMCgYB0RI5t8wbyIo1H82Wl/cht43SVXT37rP1lkz7kYISaCfU251jiHWON + + BWECvFup+k5IL4Kx988CxZt7zJcAbgx8CI5ShvEJ1Pn5sl4flwjoblzxY/mpyNYB + + efYc8zrCkd6ILhCrKtbxijt1C6ETh8ufOjoLKWFISLkizKwi0kYILQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:77ev4xscd75db247gnsymtav34:ssizcjz5yooirldyp5n67sq4ec3h7adkjzb5i7nf2idlgum6ve2q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAooIJdI38ekWIkn6i+Xn5Aht38L967mmHX7N5/PZdYJl33Oob + + ML4xSK61X7MVlvnDnMxGbIQ2fFdbBnpVAMEb4z4poKB91pYF8HyoogV9XP+mJbCl + + mPzYpbEqcPt+ROyIOgSshE9c6ID6hdG489oqDkOoavTvnEcfEmCF89Cm5PsEE4DJ + + nL5V1CVZQfPBmPcS01KaDvNE065CjRyomx8dav73zpVguKmGLpxba3d2GnlTYI7z + + MNaxZcGl/seDX7KiGeI2kUC8pWb3ezyvPHNbwJOAPNKPkw1oVkEZICwnv4znEnXJ + + ZlH9qqmPIWmn+3PgWRqovpYhEEWh2YOTZaXtYwIDAQABAoIBAAy5g/CwIYHtfz6B + + U1Ts5muc0lfJQTX5O2lp+KEEetan4wkq/PVkdHV4K1Q9W0ZsHj4L3MPTLR+wCLz0 + + HUMm29PVDUC6RcA6FRL59TZimai2N+tMRAXmXoxy1/Dq2xNIi3jc3tP+vDapyslp + + skLIkBx30xs051ePAMbZRK6NEFRuQexOYnUXXJPqPb5pkTYxaYmgER21L+CfalYc + + sqnMhE+Es7YPueHv+fVr/cw8Sdauyzx4PkH1K9iummDGLIA772jerX5SA2oBXwTQ + + gV89YMdeVCyOa4LpD64OSG+NKda/H5ZcBi1lmJMDqyegTOALpTB1NC9bM20PpHZb + + ILkMQKECgYEA3xvNtJybLTLZ1bTVcSVhuuftlnBYqVLHue3DZpDH/6L6wSgUbtmH + + tWpPTzOKEvL1Yc2IFhnl4j9/d2TFs91Z/MOZB7XFsoOySe3kq+8X8r7XlsqCEdbo + + /yFxN/espG+GDdT5/k3UwGuAZek0811po1+EXkkjqKK0Ayhrtaa1z/MCgYEAunck + + zSg4wmYwT0EgQw+HuKWwmtYUO/9QgsruVFtuCr1XFHCwEtR65qnln1aratJYMoeg + + +eFw7VJE47hTuhIp1kTFe0zHy2xyOme8kw3Uu5kRMMGnaAjWveQMRHC0H6CpXJEY + + hqnz0gs3jZe/rjKxISZdibyQ2G3yp+u66EveONECgYAlvl9jcaby04p0k94UAR3y + + b7AK5kCpjH6LXsTSwiWDgr/nE2+5fQVvVGfMX0y5fe6zOAEQtBrm1pUqzpp/ni/O + + Cg0Gd+LVG2B7D0rDJ3SmtVBliybL+8548uBjdnv3aYKFLoWIVwRp9QXIt9YkYaYw + + ZEVRahAlRDkt25W1KlnRrwKBgEIq9Uw38axKRupY2fHyGN9VLI5FWXjQ6OkAygH1 + + T99PwQ7nzhNggxxHPcyFHN8TNWj46A7ECSauAvQr/MoSl/YJAWr3nA57tS00kp48 + + Ujkf4BHFJnqsaEeKHTBMLh7rDC5k7qcauALZKCV+q+5M3r48twShfWTP30PnSrQT + + +A+BAoGAcLzVVavz+whB7FuH3wcbfofHW0pI09PB88qHHbm99voYwi1XmiNl0r2A + + a54LNTlifPhPfI1OIIV83XvyRitgl3bCdww9CyqD35mXSEKhjp2UaKYbz73gxddF + + tkA/rbjwYc0rvnZumDEgeMpSBvxHKNiMCHuwvHbkeDZu2hCBe8s= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:rhkln7unkktot72mit5dmuqbdy:ilo6u6hugipdimyrzrvlam47xsmp3ur2lwnrtbecmvocb2664zxq:1:3:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:6lnma7gxkxs4gz5wuitsqs7loy:uugb5btz6wxdrtmtqf5uc4i7vnukhj4wwezi7ygwlkguee6ponka + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAvsUlCU9RU0cOaxNW1B8P+ADl+e++2dVV4YDfwTQ/tfAV4EeV + + ajvOZ2qRveGeXPFoFiRs4f1jA78AhHDu9YXUlq0ID99yCZUGAa4S9ea6eSYybScr + + 6ZgvAxJo+FAkR6DKvrjGEK9ioav9NitwVlJMhmyrQbLQz2kHu9TYa+WGdxP+0R9L + + MGgpjkl5JClHMK9YQFWbC8OyJqtua7fj0nvE40yYxw2v78wyad+dxpAieoROu6ys + + J/FLcYcX5/ijp+ipEPW1izlWNtGsKLfZkulO1OHaTllztLcY9RKcS0sIZAEGWEIk + + aU41rUVAgnjz6yNu/NojE9Hb3Yogywb7fHpvuQIDAQABAoIBABw+hgA93RWOVKUn + + xNg9DRkz0NjTVRddTYzIjthFCxW9yQ9eqdGDr0iCb7eEOvUZzMZSeEhxQoKgecwi + + CE8TlGkGj0YCWBjxFmWTRz1e/sbHD/o3LXo1TOiQhjgVbXmpZbsdEj4QKXM0SpYF + + kmlFYA0a87QTbHT44Os/VReMcP8aFlGhs48JafEMxAeHRk47deugSML/DS2OlywL + + 4FNrAwA6AZZrgE9+8qXHoR6J46k8tvRI04Cx5ADmbcgoOrLBnfheUVturJOZGxKx + + fEftj7TqTtHY+YtMawSVEd4tC6V2XP+vqIVduYw4q0gy/gPWKquKC8NE0BgpgXui + + suZvRC0CgYEA2KwFvZ39x7+ALjuqWd//jnfA/RWGh01632PCatgrlmr+XMHQQLZl + + xrpN4bQCur9yOtF6jkF70npK5n/LnbtjWZ6CQK69jXnShUvdkgZJxk0iIDT1o+5R + + 3r8hi0qWxolhhyLgpIoKuCIU8+KHRnRud8Pw+oW2aMWuDPYVSr12sNcCgYEA4WWN + + 7Q+h/86Oe0L1Bjv7UgaunvvCDpNVAGk1IFj3+FnVFf2PXNW+ECsXBviXNvGzfNDm + + UoWRZPI1+ZBU1vzlidxY3ns7l7Xa6NBVBEKfEWwSeQ881S0pF0Cf7MxIP1xMUts8 + + tx5koWaCf0+my5kouTqHFSelAQmfgpYetowJge8CgYEAz5+HoLvUg6Qt4B+sjZLo + + AE0g0WPfFahZJdciZd/fZLQCKkBOnrQpstSz7KPiObFadKJnHgoB7R7ixx2OsAbw + + nOAXUIQhf4BNCw43s8Xyy+L94H7fI8crDJd6PU+sS3M50ZTKTuE4hFmkWk+n8QuB + + D6LjOC0JLjy/HAxzOrtzEOECgYEA18YTl1T23d/M0L1pub0kPAM/md0jijaLEiil + + fkENqge9kR665sGMAQhvM/I5OJUsIZoOVAOgC8Y/25jLT0CtMUvrG5lXlEW4ulXu + + fXSVuOT/zjrDHsTr6GGqd9OcemOOgWd1+Uu0RDrRRLVo1NHbhW89MAhS0up2dFno + + LxNiaqsCgYAFitD9jsQuSigjltdWGBnaQA/cyS9Y5VzU5y59B4nXW4JOqfnLmMps + + o/WGAO7CKBvnz+7UOCOd/1ZdsA1ny70ZbLsgaf0Ku3+ehS5XNy/ow0LBFqBEw0aT + + LYdUwudveoV5ZN1SOOR19Zzc9+30WHRP6Nd/UtfX2m+EWF/A51AuRA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:l3xpgqv43m3df7pr462evj2mei:xeixqrar643gyxwyyz4ccxjte4oznzm2ka347klrwr6kwaktzjgq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA1HnRxcfB+NKQ+Kw0dgtWgRUXgHcmKmQ0cu/44QlykP0BrFJ0 + + B+jmpHwDROh8jG8tmVyW1caWlAZpdIUvqHibCB6CJhQ4ymKGkC3BBTlAzUSUTxEf + + 8vlx3UbPvvMZVjZrfTxfkcdScEybizqoQVcrxeA9iU8Ud4ef/dn6xT/rgtoByDQi + + E9PWRwByAqnF6fwsuKzQOzMDB6vMPPjMgo0lqJCgXHXZ2XY7ApHmQ547pucm6GkL + + bs+Ox2eGDeizTbmy+JgfqriJC0pb6cMJC65gBrmG3qL4P32EHfQFkZy8vazMYbNu + + 7pPM2CozaJ6XHGCOQFNxACFLep2V8DiNb+1LAwIDAQABAoIBAGG01zMlBdzfL406 + + 2zEBS7k2MsV/hQxvYfMMyRzq1EU6I1/T1smgXxd6c6JnaobFxWlFu5L4rFvLiwjr + + ChxlwZz9MopCOE9Q+WIpuB4n0tXR2IV3cYKxFJxVqMi9T4RmqA1CCwylZRKBF/Hx + + elf5twZadNHEjLveoUMBzyCPoURdF3jZuCjAJCX54NrD+x53hK8gKv4OOjp/k/DN + + inW1wk3p4ZEzy0/A7S5EsP+BlwRkkT2yvdEaqCsuOeOEwIuz6ZCK/EZp57hsEBi+ + + mbqh4Gdvj/MxOiWOa4MwThw9eiYmSGwBpqwwdK6qGUNj8LrpTREYAIVw9lwrN0cz + + 8iQgYTkCgYEA7L4Rb1Iq9QcDDnMBWFUDdVASILfePCFwbmPSXeq4I4d3V/hRlYdx + + 4nNxva+Qkl+xZZovOlcFJyLu3xG4YYqALuVDnpjVXIKbHXrsJyYRaPTNc9iLjz3V + + cGQJVT3/uIQRkjjvws37FiumntYwQAkhEVqVfemE9an2D2sW3zrSW/UCgYEA5cJs + + SVF4P96iNb6gKfHPvMwTmrmXqRpSc3avkM6WBWthx5RJIPp6jEw06rpXfclILKPt + + a8V3TOlZpYjjC0M1QgShPtN3zUPN3L9T5qs7x1ysppn/NNOLGgHMkrXDRcoAW7xW + + 4rBqobvbY5jIgAut2WH1A7MrYo5F7YnNOY9N6BcCgYAzjx168hk67gEDZ5aWZ0Vu + + ija4e3LiA6JZ2FGbdKAP1NPwC7uw5iOuXtgZqJ/C0SZwa0j32rXblScS2+gdDi3m + + iLXWV5C4KhWgMQI3cHoAMriAD1wtoRjX9mF1+B+2TsUI5G+LLJMPfAg4tYsilxpl + + jiXamz4CxrY5G2iKy2O+9QKBgQCnQvjOD085P/xan+G9Z1pSGUcUVpP/+TeY8wgw + + pRQ18cyHHH54UaCxTjEfyHQ1EDlItjX7RQ/qn94xUgvngQ/edbxlHlGSzw+o6mhL + + /tBP/Dl8N5PAg1g6oKCrFUOJJNtJ7TxbXw7hmv7F7M3Z2abAID3caazl3Kkvmigb + + BSY0FQKBgQCAM7Q1W9SjcZ3b5M8f/POYzgb3N5QU9RzvOJbXcs1jEB5LDdOkKorL + + mx/6lLXrKN+mkdJxXLO1ruNzlfrns8gL7WeRUqQ9h3OU0Ru2Bxe/VFja0+ZR0V+u + + 4TiKtcxIl9EijEsaGkE7mRAmlOnyvOBuEFmEkVA8aaCNkzJ4v1AGfw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:7yjcwwt6454lbv3pni5mjofsxe:y5nwpzwmvpvr3gqxnykjixprpxw3w6qyqmszf7ijyxnm3wl6f5oa:1:3:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:4zprwdvwwgfc3ai3fumd5zr4oq:e24f6pm5p65dacq6hpv6vtcospblpahmjrd6uabuhg2zbahfkkpq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAzrq9a2BWiiPkWXUt6BMAdSHLqm7l7QFCjYeTEGJzFIvR1G4g + + LxSdWfLuVX75U8M7A57Km73BfTzHLkQEtv7HKvI9dFH+Q5u1DhrdHD1yaDOosqFI + + 9v/xk9ih5ngCUhOZ6oXVXnOnOpUYeXg//NTHNIAZcKS+YLExeFHpKbngDRvlsk7S + + XFTixFWO6xCsHVCNiq7cUe+1x0kG6I1gqZGWFG0NkTxycZjUjC67YNXzD7HGwOfn + + b1DCgOq+OB/u8EIHcDnw/N8ijELxbWC51Dr7zPF5j2ndOK3qtww6jod9Dihc+kcg + + ka4N7D8/KOPOzkD5OF5oZ9SW2Dfnl6SiasEHhwIDAQABAoIBABNGyGjdx9QDusQ4 + + r/om43EIoLQYuSnbZzhJPwZVF8P/saYsSqX5Nx7vDxg7ycXsu3D/+oaBMCycYTpI + + L2Rc53dytRZGmv304/IXwSxj8moS/xUBAwu9G+qcVaRm5lh+6Wg76IRxJlPJGUoi + + U10g/h5AH58oTXQ4sZM1mBdC9Mhj+Wm9dPIsra4v2x05y1qxhHNqHGe+n7JLrDNZ + + c1jZ7I+8lxBWP9Z8vnE+XxmOVENjXndSVlQsHRo2Lqujk5I6I7EcGapJH+xv1UD1 + + mdKewzqZb1MwaK5SMmRVt7q3QJ1MmyJm0Gk4MRWkGzbpj73zpKT3eeHTHxsw0P72 + + yLEKnAkCgYEA/zxyPOrUAk3AYIXKt/BbSt5evDg/S/9FOMwLiDrRgiI2neB3NFfW + + 0qOSKKhvpJM/2s6rCpHAbqI3cG50E+XUMqQKt2gSwwpxS23iky2qtetFdcPv+c+1 + + DJ+wAODXAsBpMvhuS45NEvZwdR0D9oiKrnz82mBrRiFokukuBmc1qbMCgYEAz1kh + + IbZOJu4+qY2+k9iir5gjuk9EcJzvTJ+PGI5d/gJVp2jUUPaAqM46R+eirhhBas6j + + WCxX7g89rU7rGm5aUCh7BDHxWsqtwp5k24eUwv8tgVFqOe17CXf/722jRJ4LOKCI + + 6R6qvSKU/BssmtZugasUhbjH02ctU+/IGmiIWN0CgYA/gxcaOYUQHbDlU+Wh59mP + + w83nIEf/7UGYZI3qFFjV/RWCK7z99W2rdLCGFYPSfCHDnPHK64HrBcqt245e9S3c + + fB1+jhM9HXgbwPhEj3SPWEAskdlBXII85e+yCED4mlCTMmafvoVHVrOdMN8vlcKM + + sOVqoduP0/hltkiRp1UfKQKBgQCvplOY2XUvKZhPzlHpsRVwJzPs+oWB2JAnmut/ + + 4+rf6V5iKT3jME8hsUJR83oufUG9lzts0HPUqXiYPkiP5XgAe6pqjVxmi1fTjJbo + + Gdz9q2oDKNMSK4mVJeDcFUbANBpRaD1TLrV477jCMMsCiDCpDCKgfT5aagdOGcys + + Am2uyQKBgEAVR90u1U6oevjeyFCMP6EzqiaJFRQQyE8BAtHNHlDXOZsULZxpIvy9 + + Y2Ib8QctoHfaurErSX32rSrXyXqK9mKnNUk3/DXicHhw7zPe9SrOL/8H51iBRouO + + uV3hW4DnDIJE42SShQcL5WNdFBrzXG/OAnyDnjmfO8o3ir1YJccJ + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:gmqhs227cyrfb7bkvjz5nkhxlm:hqbl4c72w75tn5w6dqiha57cwyfgijagxyhab53h2vccgqnox6ia + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEApFyk3JDYamuKCyq4piIPAGKW8xUEjZ7CSH34nTGucEHBmTsZ + + xzvMbnnIMCIDB3NIQeTTIRaSMnmdEbtDjiA5sJ54lkCSkHOaEHGXKVivI/NNTcnB + + rC/Xp7DESLWQjn64rw4UD8X3Bw5mFnj/i3dEQc0CSnwRAAgoWRU0LkXWIZaIPIaV + + JMX5cL4bgakkb7PgyQ16CIWKA6XdzAJA3Ef4TozRACeB6YcZuC1p12CSoO5kGvOt + + TLYd3OIvOgkU+TNoaWxf8k5ajPF6cXKDmDCDjwTShK0lhCRXqKqas2EwcZcp5Wxm + + Jz/tYerlcr2ZLQW3fJ2I33hzd77RxFfOwYiE6wIDAQABAoIBAE4oL80io4aXdKEy + + w3Ncpr2MJDObPvsJD2HhZSN6yHRhEGqJDA0NhnzSNDuPMNmOHEIZSbxmO0b9RY90 + + +P7QnB48fSMVuZwvHIfNPBBRN5dkztG6qvnyFh6LlArvK7pW0AOOMkP94yXb1vfA + + uePb5v1TO0+oB314Y5dY2eNXGigF5Hmp5rZIKwI67ab8AywapYHYOzvrYMj16Ur8 + + emmxx2KEXnLbABWPDUT/3T/4+h+T7pGOfZOl1bJdtNARGGXKIUYal/n2FFIan0/f + + pzoSL2m7dGyUFYBiPFWO3LYyVKkHpvXhicNjXhQ4L75gjAD08fnjXl01UB5qD70u + + lqU5VAECgYEAtlFX5quPBPAf+HgkwDZl0zOy4e9P+lIXKth+FqiHunSnf4uVbkMc + + tqxBNTr+Z9NvF6boRMZCIIza2QTjlCG+yfo7c/+/r7o6weaO4E3dhlb3D3ZxRVDy + + 8LxRDXJPHPiDXeMSJMt3apL9PVQxXxqFy8iobuG4zq+byOOm3xHR8msCgYEA5smU + + 3j+GQ8Uk/SK9HssEXwkRJY2BsEDlhnyFd7rtzrBMjSpdSC+js51xfmEfFf+wJDjs + + bg+LE/NOnQkqj0aP3cAnxRqxguYLDoue31/NTxHqF8Osh73CVaycbtGOlgZVSKlV + + wbIopIZCf1qT5Wqmq2iaHU4fexYwyOAt3YzRV4ECgYA8n4+7BBDqc24uEMUnpO72 + + 65nvxsOxWNqbRKGopyF6vo9zudZWc7p4g46rRJKTs5qdIsLZG5OhfzTGNPn3p8Dp + + KGvcho4WwLYJA8E+lKW0pfZBDgFcKy6dHgFVl0z3NSt5bKf71CxBI99RJU3FcexL + + ds2LEUOCdqI2inxScHp/QQKBgCAlykffH2vHRWzBbwigDP7T+4B4oq0TjSVbqRfR + + gRi+dBth4FaS1EHL16hcDQF6eWXCTCTUo3Hm/XdgdH46vQWNo7yQCFQMiVPAXSQO + + a0HtY+dliV3rL+vRPIUvSaZaQXz6oYh2sbShQxgMXPejEI5l5rnYTQhPQgJpP9pR + + qEOBAoGAWq8qBylHt6iCe/Y+mp3MkGbFXlOu01Nz1gHucIoAQdZYrIRUQShHGBhi + + SdXiBD08R2GwJw5LvvhIAf6U9EW0joklODKtl948OANOZMwfBjWDTIUeuWmHzXz0 + + YU1eZrwemS4Phq6UH9WGffDhW9UgKI7lysZjQDX9FBEIsCpz7kA= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:r7wva6tisq6m5zszgr7seu77cm:oqlgdw3hi72qtahpsi3h3yryxpqdshagvt6xnobsppkwp7ic4cia:1:3:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:oq67w7mdvze6t4nr4yxgdvs5ky:wvz2swuip6lw4fk5wmtcfchrdai4vclctok6abjyrnnblenlm75q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAuVhfMuw4NVMyvfH43pOdmBQ54Nk24hgAl4ho2iKN5cHjncRh + + 6E1Jx+DraeQXeonpI7YwPG8rwBbvJbksSQAvGZldCrnHBXahcef99uaj5ozx0poU + + Jd5EN+3v0VJhKdF/BZ5h6okxG/aBX/9mzjg4amNBNpgCcdudU9NeukSfTKUAONfb + + 2RBkWLmJfv1ypoEVUUSWa5x09qDL45PkGWcnPgKM045pzbCBowPSAymU2XWU/Vso + + ELkYP12JLOgRY51I4rVwAXWa3DUOlE+xqRO4IzndvGceQfc/gL+qAoF5HvpIsOS2 + + tF6w7nXs9Ykv7qYPU7NknyMGhtbU7dTuPnf46wIDAQABAoIBAACIHF3NB6w/fNnG + + o+wfiEgzZqcaeGnVn8rPfV2C091g3QJK2e0Mq7WDE6nOGbMkSiLsFt9Vgk6ewjjd + + ex8KfRgZtIafWc7ONFBbVgMrTjUPGnJ8NqqVJKT0bcev8M9p5m9hsO43TojCAEUC + + Oo1E5ASKHFnHvdoNwznGVXM7VymlHkRvTRIv92BoaOYVWeB6HCaRqdlCpYLht4FO + + AUnaG7JVdyFG39xXV4FAmSpJGjZLSNgwNnl64CyoilyrcTLAkRgLzD2DnnWQ9V2j + + 6S4dumacT5NhNdZ7ISnZaTPjFi4tSUaBUFBB/d9gLCvk/XTGaIYLf3BtDksY6G6o + + e5fYr6ECgYEAv2jY+i7UsczKZFsYQOt4xDhOHN/kQayXPHLlxFm5Sw5fIQZ0BrmZ + + t9MmP4dFEbBkOGI1b2iwO182cJrIn76mWAPiopEAnE5MLZTFeQdKK3ITYYJitRiK + + e4HbOIrR8BxTMthjW878oR8LUQIn3C64HZCM9yVxyGx7x6oeoG7Id98CgYEA9+Ol + + rp3tT/6bqepdFAHb4zyewdHajc3P15TAYU4eImSGMZlaMyARjRaIlAD5nzdeykKP + + CA2vdgVOjsCv9tOVG5w/WUUS/PC+wjm3ZuSit84jghhEHVOunIkA997H9DnY2jcF + + r+ew3O1P/ebnqH7Amf8JLDeoF8RLWhxWpIMM0HUCgYBM5blt4UyP1b9ly/cVdcRB + + yIERNp2ECOuFXH+Uf5tiXPa41NfeL8hiwpB2K0kDT0MkJ8hh5sQORjUfzf9Vtgks + + CPuO5gRBx27xTPh8pAIXLDA/F1vCd4aDEetZbuPiu+5s2eQo6SIzNL6eH+iVm6ta + + LU2EqOVqaLLdxymguIEPLwKBgQCAfyz/WzYM5Xpjle0x1dTZ8i6JYfLc1vcKVT10 + + Mz5DrcAyLcAoCFOQw0GBFxBOjDFCv0XNcuqlTxLtxMxyMjN04IWmDLxPCayYmbqM + + R7BhfyXA5jtIyHwXAJ3T31PfMa1LUIJOMNfpbcqtXuhu22WTbjSfCyrDRymYSGBR + + Xu1hkQKBgFFuDFlGPsREXJyvgNiMgYdTIyLQRq7nFr8g+kYw03xtgjpcw9j4WYQD + + 3EkQcurkbHTY/6qUf1oh6vgrY07W40VocEHPuimSfZHzyeXbbUuI2kXyGoJeu6cc + + ibZ+MhbfpLh9ynjyNWreSn9BoWQG9beNcw//7Yah6beMRe0P0Yd1 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:7jicgfnv34e5aim6u4agso7gsu:w53hrgczlrz36vuxdwum234dzgfra55yqsmqmx6ighnfarzex3ya + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAj6EQEncNJm+aeBHyxTcfVnki3Oh+MLhMHYXSrabWXYDln7aX + + Fl5sSGVWDOU77INbWexekm7jJArTRGHEafOBiYF35P72MVQJv7ae05tS9DhM/tVF + + 6rBYb9BURjMeNoAls5BDNX8QwctMZGTF6NTtx2q1mXj6I+acxzZagxcunZDQZIQ/ + + YqQLLqlBxtY65UlRrpMchzVfqFv9ghYXKGxlC0OzoLVERuTYWMKjsd7YCAZkkjFu + + SPBsFTN02ng/9ap6H85RwpuomYdtGjgM1CVRGllbPoY1m/8Hk/MZ049SNeByg6FD + + YP830YZf3Wwru3xo+WAS3YWIYrKc9TOZHTYcoQIDAQABAoIBAA7aR9heUaX5tjPC + + yLlRN8nlm/p+hlzRFM9GwUsY13kdimFc7JHbxinUZN96LcYJrWmGp8mlHZMNatyF + + mbNKgvOZHQYOwZ8cmCd9oeizBWiLkUFsWkm93l9YX/v5xEmRhenkOgxZrVNvtmDO + + tP1HVlF1Z6h3xLJFYk1i1whQXjndPKMvlDV+nXdvZx9Y9x6GOKG6eHyeQ1lYUmrS + + jUei8O0ohR5uBXNVETDpZFLExOhpElmejowrPvvNc8A1goHkHpx20ddZGKW97aIV + + wbgPiWA0W/nyWChPwBHHfzv1QXY5n7akiP96KqknvoAQUUhEWYbVl3Ra/4YtjImB + + p0lfLHsCgYEAtr1XIHTJpQB/jaqKrNCh6ieixDDazjAnlWEaY6Fn3HFRHZehPzfL + + Ylnu5Md68PqDbb8ERrstAgbJ8lBZQboPBsq93Bqj0R1+BrsYGWuUXj+gFjj1Z3sr + + Kissmrc43oIOGcBvEuCIkK1QgVyB6o3Y6oud2iB1S7YyPcLLBZPehMcCgYEAyTXL + + yA17mcirXDuRkFqSuT2ApVRq+ddOf6TYxOcP5RZFEuSG01D4XSJ7iOsELUSGE7O+ + + 57N4MCdDdP3TRGOWCt8n2vP9jvCHT7Gz5LVuxzw9oPoe4ahh+YsdmkWWUWxgGhXk + + gifqThihSTQFRM0nH/MDpDNy2BGp2iFFVbS6G1cCgYEAlyDPxY/QlB1tYAQC3BlP + + Tw+olQiybIN2uRutb2g1NSKiKw8T0+yYz6YA5EP1cQY9W632I2j5OAvVSAkbSDhP + + 5RYXHskJYhA6AecJbzyBX9DO3JIOop5CfIVoRivxZFO6xaFYOwxm5P/w7ItNBmZ5 + + VsBQs+zUFOGBe4J11Q8NoFECgYBcb9Z6xZbvA32WFde91Z5qc5LSYYHz3bI2eekM + + LIrk1+JL16kJE73GK71NHYsBsOVXz8/4aj7hAGjBKosQdB/ORs7sjAME1AOV3TGj + + 9KY76bT2a3IcgVrhZcPnx+hS59MOqNgd43CFCFOwabGx9f3vc5lMqkYsdZDuoTJV + + OX32aQKBgQCr3mKRSwKzmsBEnoyfebbW0WKi8E7A/LeQYUsHY7zcKy9XNPewgqi3 + + f4cgFzPF0InVVI9h2k14VW27Yf6wqvpDaPYmdZiX45b4186Z/gSnjMgLthkEo8nF + + HFeIFIz6LwA/o4f6cmHIL5+r0GuOSQ1RyQPJaC2NGFqRLP0xjw5HSw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:joatus45ult6nt44xj2awpeu6m:jr5gh7rt44ppdqwwwq7v4feibbygqfbdwxv2siqwijkbnhvdej6a:1:3:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:zvtntitwrkhj4cgrby3ffhlhxi:vn7utwydkd6e6pwf7iato5o4yplgpvhclc3hbt7zgy5irbdrmvka + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEAyK3peTMxSvg10hxjiJ7bUENuiH+c8rXiPG0C+aQGCnlzn0IM + + gOSrSX0FtKBdlMgAGdlLJB2R702xhXX9xbED4RnB27lEFCEVCMZjlRcxl1NBivNT + + gSMIkO9+YRHsSQeIOoZ9QVlfCSk6TfSMyRnYAERZjbITtJxW08P0M4UY75plTVrh + + r8tcubELsYGCy7DjyM9oX5gUY0KEqWAIGrxyCS7TSHsBHCor4f6hug7t1pdJ5RWN + + Yn76apmjnXnhZj9LA8AWhqUqM+cS3+GJ9F8AaIZHOF182vDC9u6t4dR41+OqcawD + + CYCJH6wZDYyUxf5LWKJauG0VH8w+EV+7xlgjeQIDAQABAoIBAADFimxI4hujsLFK + + IqfX1IgOelJUC0pzoJcS5DwJgWxw4xztqBamynHR5T+4jiOQUU/IIh3Vb0Y4SkJ1 + + HbCw6Y7oBnLN15EsP2R1PtTH7gzi6RGbtep9M/86rIW7B+mP+dofwkOKEG98lRjP + + o+ryCn6VxLJiyOic4UiXLE02ac4iDBrI2A5S751PzXPPKl6rriVF3i45IrWV4bXD + + iNFOQeq9T4jRrpdhEGlks4u20Xdrk2qZrfYmjlktKoypBwVFkIT/7phuL8sibkpN + + psfnrUhldGFIiF4YE62Wd/2axCqiJ9xX2eNandSlSH/rugwM3haGDDCjlneX7D+Q + + tc8jCjECgYEA1rZB+QWGt5z2f77byK8oJntpGdGxQEihzKvV47+7/5nNfLPmR4BZ + + bHmvus2LpkZ3OYmZ3Ay6hbReJjR8ZGgEknuOxqUPp5Sxo4EdrSYrOmtdgc2ktGwH + + imPGrKuwB+oDlKKpxKrr9f731ggF268NY55ZwrJdeVahW8D32S7rIlcCgYEA70Td + + ImY2fDnD7d2zxG/I7RiPfzlDV29cWuPk+t35HBbEnY9IHh4ye+UlUCcQTWp+tL/1 + + BtdF+xQvk++D6F8opaxOKvELH8GFQe0L52ougNXOle/jzeRNAg7xk2w7BdtDI4Yo + + nKMlqDHbu7QGwXFww8ZWF1N+OxgCaO3ohUlbZq8CgYEAv4Q4mn/kZ3k5oj7C2mHq + + RVEFMYOKQFXJBMAtfAV1EovE77uj5xlEKm7sYYqgSwNFq2vicpZj9YkqBZgBcKob + + kfFmLCflK8yFGtu7dcu6+VP1RygABvLpUvamqzRFQvnokbb6CTOQX486z42+c/LT + + 1YzUcccZe3bbXPVl3jJsh+cCgYEA6f9B+KtXq8PejplcfscIDIARjk2VQ0RAYQ8x + + V/qP7l2B6ck/sVy86JfgFvQtKFj3E5QLcKZF5VgHc7kxGqc9nFDXnX1g8KyUwzWt + + h6M7WXo/8DjMZAZbHaE5toCJdJ/LmElTHGUdpdEk4PweAz8LFhu5BFT+RZKkgLPy + + y69DOTcCgYEAkyRNcRcKTUAJF9ETcURZUydYxmVp61zG870+xkNib88wR4hMrUvh + + lCFlZsUVUuuCeoqHWZaMmwwmgfoj/xMc6r7h6b57Rfe1tTQhvhy4yVC3+Q8nR3qH + + fMB2mBedtoJpcuNnohg4TVmLWS+iVPwq6LLYXmqWs8T0gkehCx/0AFY= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:zg7tbgey5lcomfxvkbxcy7bdbi:fvkr6u34kfm6lnojyz3bdrpdvvpyzhtusee3lx32blskntogde2q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAjrJ3kuOX436Eyzbgusynmu0jgJDkonYVq0aYKRZJS+zSIRR7 + + GJTPJb0VzkxMgKsf4BrVrsbybsZLB+I/JDzKhmrKaTVj3pw9Rz190vqif/JZqyY4 + + g4K7El3P7C+9FhgF4/WfhOTpVmG4Qk7XBjzWOQcBcwlkB5fcSx0dfK8ou4t+pTjw + + pohbW1l/ewQFqj5QgMOvvyxSQJOpQ6fNGv2T5s/7EAur6wVkp/IR0eB7QHMOUwRs + + yQo3SoM9Nb6AL5ai1woc5DgjFYr3q1Zr8FbLk2n4otUQ8Mn9CcFgitZx9ylG2rSn + + gf5FJf57uSLrc1jnOnv3FPe7Bxm9wa8ltI7RMwIDAQABAoIBAAyYLnSUMN/SPVwG + + pzwYrw+KyZZ7c127CJUtR5j5j67E8EdQj7+VXSXqc/Ly1tFU1gN8hHEG7yo2xzPv + + 1Jal5Owk0pU8y87ZWsRsZkWv4fxjKMxLaDNQ329mDa491ZvbGYrLe/C85LLyltKh + + ACdCFfHcYlTdNp5y8u12qUqyPQKca5oJoMXnkDUISKO2t8QY4yZy7oOu3cljiE0G + + NOQvkyU8y6RzL6X3/mWGR2dNNvFMSx+Z2MkNCN22WI1cq76l8S3TwTI6Kb2HweET + + 8brtEG90BQ5mYvyzxXgRhIuzcnIekRoHJT1FgHwNq9EGPAWLjH4FG3wINUUdr+t6 + + haoJIWkCgYEAuJC25X216BEtCXfofu5giyENG2qtWZ8C/kw3MLr/qB2MR1P5WKHB + + k3JeIwFVKu6A8o5obFsz8ZN8fUnEq5PcUCLTWKQw3swGjOLdDcU+ANUeZhC02cUH + + 6EqhlqccqwdOeqrjzDIh+d5OT2NECUDIZyxteZAqOxNMg+3ZFmEE3PkCgYEAxe1U + + aLJdWSoiyrr7ismFmUByJ3bYYu5q9fDqfLIUBH2FHIoUymLARqM0kcpH6obZjskF + + 8AXW3DYW/CkfEZOw8rS0JdEsZV/inWdOIdHfnfr0822QCIKvw5gF5tMN2xosYaHR + + N3SvgLSc4xJGB1OEAS2gKzqGerYPQcBKQ/flBosCgYANXCxhIGBylAu2i7+AsLC8 + + YYAZY/d4bVJCJjI4jNDE0p686w85ozvn+HdoAUiw+uLKrBRTA6cW7Z4tU5Gw+dsQ + + 0fSKjhgbiJlQyXtG6+g5FzREHyF4QhL4da6MwTwKBVVg+83Rki9zbuwsQvtB0Dax + + gT3LduwXqqX3RthYDl3TwQKBgGc2FmEuOc1oUpJDJS6/XaKH379Ckx4r060Cf1Sd + + DCE3TzWNr7/F9RwguSYZRJ1AyqxRmX4LnXph3mSKEQB6crhtkM9zn2IRuTt5hl3O + + cnyQRDG4fXZip8MoQFOY1U3e/SvAVThE6cwE4xbqDYh+fYSbxT0lnMDatWQFIPUG + + jPB3AoGAUgp8W9DPRavRwo90Ijmqs486/0YOB5MKfb/tFu34W1KTCtG1R30JA9oh + + GP4M6PRNYq2+CoWu3vzdVNVRmFV2TZVy/TJD/pF/jcSBOurnlTiafdi5CM+GU7I7 + + VM3I2EaE+TPEB6ovFqbtkhb14SPPYVt5BwK9EREC0n4kMRvth/E= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:mz7pzh24u6flkfmfvvokdwmriu:5mzo57de2ywsdqkdvm7557gcikkpjqbmj65mk235t2xyoejtpbta:1:3:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:yrwzlwbgia4maufleime3qnzym:ymybiqtqxpjuo7rwkvmxqov2baz3ikpyes565u3b2azlga6k3axq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEArKRDPNNLKhOIsALx23rZMi3gZVwZHDzlNuem1GlsnuCmGjmN + + kTFruy6QdNiecKO134SCK4XFB1pLsOrHlmyiWg7sulwYLAmMWticGZ41aZxANQsK + + em1AEoqqrtWDKKqQ3vrGdsLYrVFdgXk+KVavoy5RynZTURXeqh1AYiUujTP0EtxJ + + SxHyQeXgtz0SAMi7RnyY6ohdYOlhAj+6hQMBRkOOdXpMyt718QIBnVM38d9VCJX8 + + tH6fDIB8rxj/xYEu6V0jdxomYRtzhAK+C8a/JnJEJ4L0N0Dt9GgB826DQzMa5JS9 + + GXtyucnOmsmFjs+qZh3YJf/BQSZeCKYsAjcZcwIDAQABAoIBAAOFvyN0vNyzv6m2 + + XatDPemSsGM7tlLHq/ZAqBGUbGrEyE7SVsucF7J0LZlcuXAwlEDmahDWRAy1hcQr + + KNMDuL+f/Kouv9rXf7LI0aKKLP/QeCo85UQAik/2iVX+NZS0/4tf0CsofZWdCoyI + + 5eufq6oSLglfUa2JWzIwXO8ZCsfxu0UfdY+dp+/PWUJT04P1pkGxrWmOjXyCKSd9 + + fRvX0UGQBc6OsJZy8SWWoqU+0KiVdS58CIV1WdiRYdad3lNPs0IFbX4wQ6KaX0Pm + + w3Y8Spm1gM/UxKZ4pHuA831Go57bMLr/3aZPeT8wvTaG1KMh2qK0mIyYd8Nvd4NS + + dQeJDjkCgYEAuB9FGZWCPQBtbq9xDdBHm3585IJRUo5WzhEMcnbbqfG7TMYeNP+V + + sngt8B79om4ZdAHQnlmWwNd0AHQpGvi+V4OsO8VEpbtiN99nSf5O0PompWRm+lP/ + + wgXgVG9CVniFodocm4ouwy4sBrzvsOVBBtCBpq9++4iS9xX6FSMPWYsCgYEA8Amo + + u4x8XI6qbrXO6w4LNrB+vjjOV840cgQQCSoWaShyCqC/E5ZolEIFEQmnQXSwpB/n + + y+XTrPTWazEBhKhhed0Wj+SNAkCSrl1Zv5yPemjmuOUThiR7msDJSFLZhT4HwbEL + + O0anGk+Zfdo0e4y2unOFCvoOujBQuUeeJFairLkCgYApbwABzd9NEveNXPW4AhLb + + Lw+z7I+YYGewX63JZG3yRG+9yyepDYsGan0L+C1jjBs2O+JSgB6ortNv9rP5Wdib + + oQn1OWNFWHG12RRJVm0uIdzogzuZQaXgZ6of1hm7k8uerJKbffEgAxftPD9EM5L6 + + kZlbhUqyF/3alJt+fjFKGQKBgBd/2pUB2+rzzJuqEOfSKCbigIX+6bSO63N+ElPT + + Wv5Qh1mjAxHX18Ur8XMJjuZJlkF7HiZICcEU9yjnU065bVGQ43SS23ss9y861F59 + + 5U4Glw/i3VZ0m+U6mnoKImF5ASllO8RB1nos8MnxYtH1pK38QToh4O85a6235TOJ + + h8OBAoGAW3c51UXU4Ix/QkOUmCreh0QYruqMhdQSGIzPTVeBHm8nUVDqEnnbABNw + + 9dPUFRvkagDCHBM0J/G1SISKNYUStIBVnwOCVc6wQopC7K+SacN8Us7oG4tZwFOe + + C04YAg1FeYDYLuSfEDFxsooV9OV2Hrkc4dQ/27X1WwzgJe/9s1g= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:2fneabhgwzyxbv2toidi2mafga:ultt4xt6hlsliy63zbvdzgp4jzu4fez67lfbg7ogrpzarsharh2a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAkq2D5r8pQqQYCgRMs3aMkVJKrkLY/EFnNLqM4xXj7aDMwv51 + + CqMNw3A17DsL6jCVAFqCK7prPGpfBhFG3sg/n7oRbrUDn26Ow0IxP/6JAAe2+uc3 + + YnF44NnKU5+8hNpyy8GJmtabnNx/+0oaKnrr0R556u//NKoW+1sBB5lM9V8B3GoC + + bozR/kosFoxzjCYSKROg+V8nQRDW/aqqDndD19Mk5x56cND4++/mqWx49nTsAlVb + + 1RiygnfeP13BrMiUMP998a1iZtnpQyoAMVSqObFh3eJogmpL/lKh80V8PzeerR0K + + /iryh/zRxXGyj7HWE2qa9JNKo8qm2ijFoPYGEQIDAQABAoIBABaVXbIo66blkgf0 + + yoR1M8ZqN7Jl+3e3cDcHpAqQw8PCFtTNDeNB4KwfOkYxfy+jJEXmKZWnAbzPGeta + + vKEvjtA+e1Gi0Dh7csKwjdmvDJPzHCK8d+QR2Y0xKzw9425HHhauKUwsT9BSiOf9 + + bFLvEyDjAt1/7zjCGYDA7cMoQNekeficFlaB1I7XsTH2w6w5SlYmSLl8rtkwn1N1 + + kaHgZp+YnotGg7D87J1WOsGR1grnK4E4EjVodCdEmFaSOkpVeCI22W6ZCrKdBNSf + + h0V3vyEfwrGd+FH5YJME51cD62ifioNnNQjzKvQLlxXCprUe9JFbhEGdRRR3GF8S + + /WZbJ9sCgYEAvHNMZ6mo+K8gul5VyJw+UNg3fhOK9vTKwkaF/x1GAyNQ/pjkup/e + + f6087aJ9Xn4avuv4h/yhbbQSPreCr6lSIX6fGDpxNXcUWH5eKLk/bsOcmneUh9Hj + + kvPJ5k/20APSoAsnN+pxiWmlSyoRo21DAtC7piULchyzEsY0a10DLScCgYEAx0EN + + 5tCBYnuKgqm9ooB0PgANWGwkYEBP9lhPtNAIThANI0bHI6yM5p8wzr1exLMN0EXH + + KB0m8c0lw1/1iQMGWYmRljmteORCwdTb+txiZNS6bUY+mzbRx6g5cPzR923EyjGG + + lu66pL8JcfJQR5BlkqwVJTbM2S5uSTFjP0z0JgcCgYB2lzArxA67gKnd3mOpfPmS + + Mp6pTm8S/fVi0LKeWrOmYeEkdt7pupVwT3qaKLkwb7cxEpoyKX8E5F7e7Ojm1m0C + + +wXvX0fC148MKWnjwr/yWlMAuePUnPbTkWsq7oNpYB557MrfWz/bs4n7hRvYdnfH + + G8gaxBEx3HGsjOKL9dp73QKBgQCh966uNkVGYbg4+HOvGY3kLDSs8NMs7npRfH3m + + M8jcc83KJCmSRRwQB80r8OGNMSOEboQyhmf23FTbGTDFHBFYTSxsGhx6Dcp6N2ZN + + 6EGPRyD33MbdctVZ39Q5lTm0UKVL2rBWFl7ftm6eEmPRmH4ImRtjMcWYsVZy5tOP + + TCWWlwKBgGMiL5S2zJG2SSo4iDqZW9jbnxnOAbAoMh1X6CDlVRaj5XYe+FqXFEQ4 + + aK4VpalIw8WCzgTJPdJLJi/KJiWywco4lvX47tCs99PwYnP1hT541XRKjcel1pCN + + GlE/aY2p8fIYY/yDDSOLkssn2Zkye/mc1jteKlXD38T6/ecimkm8 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:54sq6lrqwqlpxicg747gdls6ri:2aaxyrdytn7r74my36ek434hlbhe6glrgr2ic5vvpc5bbdxmvo6a:1:3:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:an3ntbx3uwl5pzmgz33s36tfoa:5eaytstw6x77wsov5jgvxt5vhcneykoe4myucajylkgznt76vecq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAsXGGPkzcQLANVVzczL+QBOxxyJv5zk4UiSmqIdJavHiGYDeI + + vp31Od0jdn1eTpbyixEDOrSKHRYwsDRavQ2mRA2NOJkWe0jYPIzFV9tvFBqjnUcJ + + NaOB7mKwFMHKUsIjepeCaFey98Nqvfm4Ba4s0MmvA/DPpoZEGyjK2AoUdgzlzfFx + + sC+XO4aIFKRcDxJX2f6lAOsKnUvFSgGw9qmEnUFI9kcw31Oo4Nt1Tkfix6ioEv88 + + y0PiJlMDIzbvOJO53dUCrMiAnv3CzpCIx5USKaIzoPu7fHSUmMIsetvKHoRHjs2E + + WqpwBsERKvOxte9SFUDiV3my5ssa5rq6DEZ5yQIDAQABAoIBACUVxenFZI78fHzn + + wJnmO3Jb/FfiCW6NsQsNsyoIbcBQLD11vdWg67yhNCUyhIBGWgComJUvYGI93gUl + + nAVBEgvNDUPT8vfnPJJDFYeMLAX2n1VioFEekCxDYeukqOVs/79CZRXrplLT+74i + + r8w4H9OvIy3eqXdzPk6y0toeGTKmm7WTWheMXTfiKpsn3noJBj1+OyjzfkEEV0Rt + + k2MDwupzLgFg9N2i+CEutoobxgQf2SUys6SM3Nf//+mtBd3pciQWusOKW7rzmX5G + + kO9GWTkG8oJko2OECRZExBpPdw+3/lb8HXnqLC42Zc3fECSeWLo0evilT/k9jjjw + + I2TC+BUCgYEA7/P66VQaCuskhT/9NDIVB1Mwhpqxvy0SO3yyASEIkCXGk1m58RsA + + bPV79oo8bD7nUkbQBS+ChTPpwaiPubg0pyX+TTAkAYNtlmP9bQl7LYR0tWDjIuol + + Zxa+HbAvmNclzQlGuk+bgevT2Hq/0/E4OZP+XcauaQfAmfi2FXOhuC8CgYEAvU9f + + tXFAbYbNNYM19LW7DXTVxQAk7+vn0b63ltpysqxVYGRxxReEtiHIgIapBO/aYABo + + ZMJg6gX2zGjcfBOzWKpnIYx4jP0cUrvNHm/by3/2WNOAzE2dYpUZ7+UzvujtI9Y0 + + JrCpB3q0B2885LVchDTU5XjYu+PVo5dFIwAH94cCgYEA0UsCwL/dk0Z0bVFZ/kvs + + sZ3rBo0pmnGqpH5oGLoCaRC5+s5ZdCa0IVWhkXITr+rSA57GVK+S7bJRItxuuHQm + + YOCvxg3GaheD35hJdPC/Iv2UepwOoeaPRzK8EtMZQPvv+b4slddX8WOMPRcb+LY+ + + 72HZjVv9xpi/cs1PrLhWB3sCgYAUpRJP7DDVgOziGBQLQsJKXmJtoG1myLg4NG87 + + AUme2JJa97k8gCsV3atK8OR/yFRtQb4gtt3wx4O5mPnqgg997N9gVjxTS8sJ7rcY + + yaQTljncR/x0y0YNmSsB8WHqQOaTkOmRCpT0XtpBMU1Xt7uGI2jQOZSRMPB8baO5 + + hGhaAwKBgQC5GJv3sLa+21PIlXp6UuIGMFp39iwfAKchhnhXP6rPkC2pP2WB11xa + + W9MuEko++3e7c7+adAoPFdsjf+a15CjogEURZwskiRpBYyBugM/y90sWM7ddOsJL + + 3GD4Y0aRJ1+N3R+l0MAv8JMAo86g2Xl5J423ZfXxnosG9JvtvPGndg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:5hiosdrt4b4h3x5fx7v7cxmyqy:jkudr2qefit3qow4xs4eldwclbiv7m32w2cvu3igrm42zcak7noq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAsU9bSCK68rb90LSqN0IBMqtLfLkVWlUdKXD4J6tTtFiFWuoB + + Z6v0kpepHIIKVfWQc74ms5wFX/M5TzPhjuzf+IXMMBC2d9Y4p0iBwIj2S0RIPxH6 + + d4iapNToglT8eyoF0I7r4S6iV7t3Sr6q4DqtPlQmgCSvKbDuNYuP7eygEyR94Q2+ + + 3DcfwZ59W1u21humiftuoy46PSDMR5/RFY/0KfMaIeGnqO0IeWnqdSsJlyhy9jrq + + Sa27VycC6p5FnpzqkTYlY9WsZn6AXvrAbVX7wmNT+3E7LfO05GIBNDKCK10Ruxiw + + lppkD0oGdei+cOLTS+L/MYS2xpTZcPHQybQopwIDAQABAoIBACxz30g+AM2iCA8/ + + hB83apJ39IRv6IUNqrJ9kpFreCBSQxiwayrBJx9ra2fsyEeVuaHy7cQA3S4Zjegn + + 8yhAhcRKUw9H2V9A81IpMPKCw/DJzS0Wxksakd66TBKE2QnN1shbVJLPfL7vDnDM + + TY3K2C00rrRYvht/MrF07GAzf0xc4kt4dZ87/o0tsryZogpJRzQvwb7T8fiMNMyE + + wYYQCA5Tw8/iYKTjWMgevzi6qy/AiLBTT+KAcbaQpPF6IeRoCfr8BsTRz/Zvp3gb + + UUOWC7tdOKNtE2M19ado9l7JgoXNQ3p6bIydDFQSEg4bQxElvtz7SyukLnM3N3PF + + VZIm5wkCgYEA3wgwDFsIAm5f9n8r3SR2sEJgPb3iF2/x++DxI9SJRodM1qT6RAXD + + rNUqLSXlUUaQvUcDvIcwlP0hpETuBOjQwgCd8QEWLPRllYcWgCkBtoe0E5GyUEGw + + j3sDZ4EdPGQUaJpWFR7ZKEGNVjFDcRq3cEGQUkJWP1uxrVBQU7ohtVkCgYEAy4T9 + + nvCfrmUmhKSawXWTVSDVhMoBNAyt+KCOaIevHscCj97PfuJNhLCOrpYQuShMGtpF + + 5DqohfqBVosXRmGFqjxJbpsQQaQCL7zKy0e2kojgoIdSkmNxKoQup2oew6SWuUoM + + /08QaILHjd7t795xIFPimcFgVtD8Uy5OaA7jDf8CgYEAu9KyXAVhZmK7T+Pi9bYa + + ee88C2LYfzJYD+1sRedbv9h7fhurYxOTqP5PKXxLdTm+9JdUbzVOVXojFaqy49GI + + 1IgeenKW0T70OYttCHsAJU58+Snuh6X6YaqPwF+8VjpV8Y1fxyOWb09dDmQoTpzY + + NKISPyP8bBj1NWZ4bzpF3ukCgYEAmJDcs458lfab1mmy3X3vcayIg+AO4N70d+Kc + + fv3gKHlVkVadQ+gP5n2YqIY0iSkNTD/+juXuOWmeFat1SjyHQCOrhK/Xku2I+hJU + + D+l1kwnrIkvveW/0gMPQWY4y+8ThfItnjOjPSxlm0RKiWePt+CcKQur09n/5971J + + 57XpPi8CgYAK/ypz0j0gYUgwvYr+URad1OtaF2rgsYNt5XwoJjgPNIBNH0i0K971 + + gIiprx1i9ew6xWyuKp3E3dtClZ28m1txgOrcMuP6L3rEXU3lA6E3ftDY+l4wKYK6 + + O9zVS5GSIqjhUgEJQU+M6zo31L2hKcOYY95zO8/JyWfT+fgBC6mW/w== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:vvh7fppprucnsblhp2nq7ixyze:ck2nmw5uynyyhbr3s7h5ciffgzw766bt3e5n3qx7r4njjzqzkn4a:1:3:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:p6slmwqqxjwjrnch7c2myu3j5i:kcvumf4itbihkvpkg46pwcdcajyr3wuglmiyw4gupqshdlnqp5ha + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEoQIBAAKCAQEA2wplwURV6PZJmwtqdq54eKXN3yhOiCaDEhdGyfEK9qUtrOAj + + d36v7ejCM1pxunmjqM0P/zMAkpuo2ezmTNri6OVwITtFrKYqhvzsPxGmysJlByhD + + 2V2Qjhngbc++q9ly8ArD0UAaq8p/c6M41YbIkafbtzrUUYMdx6kH5OP0T3fppNO5 + + F5kwnxDXEIwSCuXuyF5CZajk6RO/iMB/IeYhiGN8Hr8oZ1pgknLO57OlbnAL2XD6 + + a6qd4RnSCWSzWHRyK0N1/AiuvINBBN5b+l8tdz0BnrPYL8EVhA5XZ3Nlz+9y4Z6v + + p7vfiheAqTUUDcSBR3pf5G/AWkhIH4FSg+wa8QIDAQABAoIBAFl2Oq8gCPKYPOHd + + XMNSaRPlrFr7rG+BQ0FNTnVGRNMODcSw2uuAS7ygt0igJRkje0uDTYhOvWojt2gi + + kMFNGSZEJ3L7MW7dgzsU7CyqOfRQR1EQCf4qb9MKEJbpJZgsvPv7eZTqWLpXf4ys + + WpcjcKHE7EE+/t637Z7Rk87Rp8QYlVS9Eu+bXFl7ZF15k37uoPA4Or4RZD0Btxnj + + +QoSi3UacdvU0bkmoD+H/XBFnyEPNPKnWtxV2lQmp7zLQ+2jvUa1TKyhQyFuLb9U + + QhqGikpWnVB9YTskw5Z57YJ3w8pdnUbZokpblT1MFOc0qUNlstjXFZ3+q7s/ZNam + + QYiXwc0CgYEA6A7yRw67Yy/UWScJYqA+c54RuxmQhalk2jockY6Ur04EHA5TRBzb + + VKhvX0Po6fu6NNg290BT+jFCZNsgHiE1sIL6M0rxPJEDsNUe580tL4C+tncsqTc3 + + wdULPGYh0IYgZ9mPWuuqX8TAels+P73FFNzH29uRDNpDIYUAE+AcDKsCgYEA8aOh + + PFrYqE76tkYvtUZFgjI8R5Q045eAG4eET2BsJNRuP2aAK/bJ5ngwlo2kHlLtBi93 + + Ogp/k5wXi3JQ2y1vhjGQAu3cqIP9vVVYDZhQzx6WKy5P1tVcKw2r/KyDDiqqGcjJ + + A9efnVp/S/nESeHjOfiUhMUzpsCExa5vdDC0/tMCgYBMQ204EQ1gYX2l9wBMm2Eq + + 2g31sUcfxjXQyjxNUdBndHpBRivzPJCQV/KSGl1XWFUvvMcDpu5yUPIC90is3jko + + 00KqzLxPLVFLMh9ACtwIuoTyrmPNEMqQNxXEOcRvJUVNG+DS/pQ1eRHQpF/mztUQ + + MCa2iIg48xoQ0AbggUx2lQJ/Uh5JrTkyaABvM4Kms/QtqxFnauvzDWVvI+vqCw+5 + + sMqArQsog8ha1PgDiyaXn7aO1otK+W6X7JIfbkRrNhE61WACkPxFAP/aO33FbtlU + + nQ7H+eTDPT9FE1ySFkyKPUZCiICzz5p3pAIdQLShAHrDve+8iWJ7KzBB7uxY9COZ + + XwKBgQCRCG2U7oHU+R6eznmLIUscowU039DUNBxe/loZDOpx/fN1aZPJDlaII+Sl + + zkcOqXR9ILw/NDTlfpeptYJ+ahBgP6DjX5saA2T/uf8wgr/B+Aox0j9iBwfUahqn + + YVukY/sfdXp1xdWsllk0wc2HcoW+L90K7qHi0ihnR7oK4s9e9Q== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:frye2ctqdffyf437do4uq4ngpi:lloe5ajvtkpmyflag7phiacafx4pfwt2dnriayshfj5hvno5ltmq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAuwzavy62iNdYkMdbRNLSzYURMLaw3ipteYaD93gk9JfkDt3F + + W1Fz65n0IQN4fRol8po48mzPpi2C3Uq1N9FJrs62fx5pdMTzMolXWJbNY4xAXJ6s + + z6ciaze0VpfH5TMd4ruRZQ9hLPcGT0zODgNnGxS0l67+VVUhmeNXGqNKUwnYtUEh + + 0RMym/Mi/LmGXNk1hBtWhC6R4IhKhZgSVuD4yr0FEAlxUOsCmritJROknA8boSzu + + UFrUrrFMpo2VBcwD7kfm02tejDyXfe9aLn9kLIrbSG3YmTAQM/0NkVsu4PUr4iPg + + ULPeyUzoDhYFOnEAZf8aXRKQL529SRN4YTayIQIDAQABAoIBAAJTqlvy+Y/Rt/cT + + F8pPIhKu61QTDbexyOtYVkdrjfAh/JMHxLb6WCoP3/bSK3tI6jxumTNA0cN0MPrO + + PVtcpeFADoqdxvuOIKVaCoVeWN86ZSmRyr4JivbQ+lQSbsjl3iMOKMScUJ3l08UE + + RFLtzWhLlWSGp4DJvpGCv7hj3B6UzRIpPiisYUecyoiA8+YxueCRwE/GjdEBtAqm + + bnucpTpEgCE6idbD/8/zzHPk8Y9wLfivGi9T3M/kRWbhv2x9qrmaSFTxp2eARISx + + ohWmvlvl1XTF8ghvOifsIGOGARXk89AldWbohjB/zs60x3+Ein99WJTHSvPKBAN4 + + 54ftTAECgYEA6M/nz+42MLOSrQnotL8L6EqAI6vB9h/Rr01eRmSy/zB3/o9/PpJZ + + 7gYLpdF+PQxU+ZpgYL5qv0gPppLncWe9M1ET2gqImr2nS6KOpQ3Kban8OdGtSoL9 + + qoSdrQPpOM9awK4y+Heb2O+VsVykcJAOzH/wOz1sDH6GNe9Yldw4QYECgYEAza4k + + Eo9m39btQBS7z3Ne5zwT+XNusviF60LA8B9bepx5f3uKkcuSE5NOdjD/AYtBbEFW + + 6tqyGbee90emW2/ei8KlqkUpTwYH+9+59QTQR2cZUFYMDsqsXQCxKJxk+VG6ikJg + + /leB+M+/H+w3MD6qG2VcfUTmlE8NEjoebSGVgKECgYEA3IG25WmRaBVdcom1ICTn + + aU/PCHoxDyZaG3jjNzc/lpbYwII3mhNSHDEbrSW8NKROg89lQ5x3TM87C6GOlwoT + + 2NwNOnLJqg7ButCv3MMwHShonnbrdGyXSH+tPGc86bL0GRWlb1MSiKl8Fe5STc8U + + RTtUVTe69CaOhd06AU8A9YECgYBaTC2CCHr9onoeO/wII3pywilyxn6/C+SfWHsj + + 8GBVAAVHNpGrWFgVSAKWWQRbRSu/vx/Nk53FNJwRq98ZHY/yg83/ZsWv79HpfltB + + eo+GCXlPj7dTdx8c5YThc2fRHVRsBqBWiUyCU5JxDV9dSuWbiXCFfo5MZjgy3Fkn + + SCs+gQKBgQC2d3WE8uxl7F5LVyM0+ckCPzBQX1cdSaslQ/PmzIMkjmpm2nUVnhGF + + Ww6CDF6GOxLaRYloV1o8txTaKAKbrOZAUTer8RqK4ha5KVSWe+eW5MazbtBPGF0Y + + d24lR0kEUqH0i6qQodmnGsFHf4l/INvbQ2VlBtR1yzrBm7fki9WzJw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:pbfcdvxhbikxd2hcc43oel3v3e:y5txpmiptmoz36ionmki3p6krmdbiqasw2v3wdq4ia5lmrhh33lq:1:3:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:xol3f5smh63b63cg5zcelc34zu:646qwuwu2vkllhe4rcblvp2sdwc4hlffoh7p4gaxmirmtzuvdiiq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA0O7WP82q3/+vIKJl8tvzSgqFP2N9NpcIJ37Qp1qgVJMZoipl + + ulRnnmf+q5rNBnIMBtSiKwE8KDStxVhsQRloCb3CTFR4RMYIsMyxgKb5KJWLN7oF + + zezgtxzU+czBUhuXy3hsW7W0wLgrjJXsZboey2exrufDk3VfZ/8mMOVB2BRO8Eiu + + e2idLhWvM9hSxLz65clRaWJR3MbBFvXTR16e3urb0eBpRTKqm6a42YPR79eYZRJD + + XGHpqYk8K5AMaS8Iha+37c6soPsyNorFTRBU/CKsDb00v7NHutkuNVcTk+pY2vok + + 1ymla4hgZBfF9BFl6BKj+UMSrxwaPOdYAFR0/QIDAQABAoIBACakIX5b4pA6iNBr + + kJjduo11TCcI1rHXtYOedecZwQDbUtiV6EoRjbdzituAjg403goOXe6/s/lIouHW + + hHD2yrHQhWSaE8M+cAGI3gRJ/VdW7xBPqH6pIndjTvVjO9bccRLJ0xqUDNm+xhki + + aj33MfZTF37ecOKvCMXiX9UXtXmJlHHry5fMyaQp13lyEU25IHCVbfgHeeQrT3Hn + + jS2fJi9Dg7cDf14lM9oMW3T4rH83NabRkz9a392RSnEKubYMWL/aHcUiy16Iur5A + + MaWxofqcFvF6jxJK1giJaooMCRtWD6EqcWLkgc/ZTdztafswj0eIVXum8frEDxr1 + + G3kGsLECgYEA6Yi6QkzUZaOoELRPQA9YVr0+sx/kcsLA+8t0+9qpUCuWr2p5XCPD + + YH1vFUD1iOCHTVq84bXPxTsuS4xQFopHeyhMk2A9pB3/HCsVkIuoEUpGCAQwsmMa + + mVfqtX2iLxCy6/KBG/W61kiZq0PzpfdCTZjuTMqK+tq5xmSZl/pj0zECgYEA5QhB + + Epc8LnBOsgNVarkvj6wJfsKGjyFDQZd0KtJfIMkkc5HjSU+yx/dh4BGDC2UJ48UD + + +aXkdhXYXvSVvhW7nrNmOU3cCy6JT08X4BmzwdFcs0uu72FADoPkQLS80KFJ+xP4 + + NQ2OdE85wX3/Ac8aSSIazzkPK9/Ec8TImclUk40CgYEAo/zC7jONIiIdrj0vOUiN + + O7t//8BxZrSjVyyzZPdS1V0GXv9hYPYsB+GM01veDtO7rvH8mHJXB6RbCenpgypu + + r2jI/OQj5M67iUgnyGyJBDsnmhF3MIyu7ObzhaZG8M3FFjIfv0Z6gGZSohUBTpWm + + FV9CVuITXbuhoFKcGEBXQMECgYEA0b63aUEbGiQ7zYaECRLC3b5di7q15ApAP6dl + + +XljKPFL8pLeJVtZjQuelMc0zZCgd/kLZOtpyELFPmCbadMZWYNN0JjfNVZO5VS3 + + tsGS/6KuVHyxHgRf12st85wRdrbeu5NUMbHSje2oJO0wRgXWOreC+dd1b2aj0Kmc + + VEourFkCgYAsQfMB51KrrMyC49sUsYm9weiDBGQJuTATCxX1mSC84XRMiEzf1pIh + + csVTLMXlAGSZP4C1zqvWaQkETCjS3AfEVKnXI095dYp4bADi6QglwYV5GFvpJnMQ + + lQwWUMJEup11XmTe3KxKxjPj5MFRXBo7lZg8SJudRpgvE5IHQRfjXg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:po3s5pnang2csh2auurmksfhwi:q7ltmms4zwlmtmjw4o4dy2p72fae3fzzvzn7u3pwvcnqpqzwo33q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAuteEAZr6K+1C2iJbXOS/KguaPV5jI5r8lmZwenO7XiEnnj4f + + iDaXFF0Sg80UhsKmdj8IRPbRIkUMHzui4/g1xUXHJcosuIPxqamru5dDGj7DcRke + + 4TeOfKWLWNwrf5oL9I9NJZ6hicEE2Zg/13dZeSDS6Zyyn6NQb5Txj3H5ntHMlcxv + + UWGCESsA3A+co/AwHtin7Up+29i7NvqUXgn0paBpE9b8ZjQ00QZVksEGTLH0KwHA + + cRDBnHrY0WPZdYS6swgsmto+gtEt8z6J6w4K++eWphQdeRQhQNfdIqNDfoa0G7Sq + + R0uRaTo3TbHbzVWLPBEzS+J7ELggWja4uR1h0QIDAQABAoIBACsNrUPnb70+g1ib + + cR0TMr+gA88fWE3kkU6g1UtKLsMudaAfpYlwNtkA51rKn2+8G7qEpMWrcB5q9bOe + + vNa2I8HM5epdz3dHJCEZ0VI9NT+vdb6ycKyp7iHnzZfQyA8zsoyMltTT3FpPSWxQ + + iml+fXYNa7xcGMbzTX4gvpb0xvXi8gcy5vWEmXaUBeQJrO/5Q2elYxW8ovyXvI+B + + u6+Ul+LCBzqUQsf7xspwydSPDX2lJbUeJXJUsCqC0+1PdRbNkXs7T6sjZ3kvTI5G + + ftGl9tXdLkSfJa/yvtUoKvhWOgyn4JZoc8nuNetQhrQToTkAqYn487dcmVr91HWf + + FS9oRP8CgYEAyC9oX5OUmBHw30gTXn/0doC+SPbuFkgLvE10xzSnSjGhuqegkjHl + + IPOT/wL7dipYfmN2CBttRYfyaelgGnefhCFSBkJYufIZeUWQhbe0WG9TPSmEp0t3 + + rBV2EvLPc+G/Qm63vrtHYlF4SxyUFd4RykETwVJ6LScPEj3hSQGXZ5sCgYEA7u+z + + 8eYaTNC+uttNFB03UDHkylV92daFF2dVykqdcFgk7NiyYOBppSgVsxaGW1epOLbK + + j1QAHmRPGCKnRltzV4+jb7+hxohHhakx8YRgPb6c6HZ1iW8ZBBN8+oRLsE3cSEhe + + cyoiwDoAWzviNRhIKR9cUEs6rKoHLoPiUaTvsQMCgYBpHNuFNAzWPLVpyILDIBTR + + FJDV5zLk6DehTFqBLxiYUK9HPzWFDkXto3iWco5vYZTN6JPVdfFOjS+whSY9P4q2 + + 6ngTaUsFeCYAE5LrY6aCuRHQD7jjzzCrXyl8kZp0kpjG3TQGJng5G+Y6KmtngA9/ + + T+R7oj8c7mFvhqaAmyFQ+QKBgQCM/NYyY7ObJgWVXrfxqXetE3PMTHvxYVqxP6Fo + + t3SFCQ3oz8kZzvGnqap8PUtUdLp+o6WMw2U6ibf+JtyLcITz4ubulqYP7vQ9E2RL + + /e+IH4SYyuV6Dhs1w4YYkJ3Uz2yvHjzVOcS9prv1GbXV3Jkf4shm/K0Hm2CXeuy9 + + flSNHwKBgQCR0jQz/koDWvM79/3w/NjFEPKfeEmdEFEFkOIQQiUf1y/qP6XJ++xn + + BEvFjp09YGjDAZdxrve4AAGgB1KbeBv3w2tKxg9Pu1452YFic8zgqzlQ9Dj1bsxq + + oXB+6DwwyyO6v7MGMZaUTcLGhlzulAFW6eNugvKC7ZZUHzEHdSKDYA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:vkdc7iae4pgkdomhbbb554kv6a:g5xkatxv2entfssfh5eqgexb5j3qs6jvohofjqo5p5erlxlx2dga:1:3:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:c2vvrwbmunt6tov3q5eptobzjy:ppk7ttf2hkwd5ff5rzbqlfjox7ygijqzguzz3egjy5quph5lmrma + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA34lcTzYiozXhilksLDEew9TFTRd21etDcUnHEJNt92MdX6eW + + QKH4V3u8l1cgAVIa983CuLeQcR/Qwr+93aQ2YO0GiC5rYGch9aJ/ybTSjN8MF2QP + + aHjc3etSS5WoF33OjD7wd/D84AkOmXA6On7oTcfteyeTtCql1ssnrIukgw2qy6Hs + + w67kOYeKu/omlmmKHX2YAwFjR+j0lBNS3lV1S+pEz97kNc5mBhyrx+XFWXxYvtIa + + DDaObv6BsTuNbegqLM1fvhDUbcAq8ymnr/IttlFGcGzu1w+1wo6SZQeO23/Mrb0y + + +PJASekB6CDr0tIrvU+0gjG/SroDE6oR/UcC/QIDAQABAoIBAAHE6qWeP8TuuSPC + + rYS5OM1pyP8uTdyTxmgs1ZxnrLZvouMuBnrpehE0ygFt1gBP3/KRJT1LOqOI+G22 + + 92MIy/z7zN7vQYToT0HMV1phCeX47lwRbyvJAedOiv6zjW26+BNur7GLVAnXGILI + + +06ZalZFqR2d6qxBrPSK9BWIbDUBtv9u1fe7eOsjLkZGjYBsOxrTtiMcDILRvzHr + + gWzEMSdfCEiNdmaz4j+JjYjqkFiE6rKDv72XvFWS2NUSmhcLG5lKKqeUk55aAEWz + + lR5xamqdyyD0z7RSJfg9xLn33uFybhzW1smVcjpKP4ylBmxLNFGNQbXPiPH0ja1s + + jlCsU8ECgYEA6jDz0v0oLjUbVceQUZpFaa1orQEH5OCC2Kmn8xPR5APF9GwM0bgI + + phPTOp/3BM9KNMdJbwAHJHDuaKwTZvIYyjFijWQYP3iKRZi0uYG0w28m9aA/4eJE + + ZHoo0LEQuyxp058FLkrZXScaxv5O4piMKtEg1HTq+JX/brI4OB/zx+ECgYEA9Fpn + + hh+j2q6+hhCuDPbxYIUyf7OOx6lCEs0zlPWXfyM7VeArn5ys8us6jQHIUu6/rhf8 + + bP0k1sOvqCMyVfCh5iC+/3zAEmb2UOUQx96ED5k8gU3DNJJbI+HSGt4p1b+D9C/C + + twjkawoXTd5upxouAuscCmnw+Jubt5TOUkY7Lp0CgYEAgUAnMYk6xdXVklAj3IWy + + TZLBNMpe2vj1/jIUWVnU+20BsdZ4dL6HN3G1oKNsp6DoKZzbcIGpb3lMe0SNKMHw + + 4JbE95gIse8LEUIobEGjzEDqVaHt3/MLIBEzuYof2821UnBvYY85y+mrI6xzSSg8 + + I91rqxYkILJYWXXPBVrNJsECgYAVcy4tRu/CTZ6p9CLjPnY369lf/molOsVzExJZ + + HCn9XiFiS3ho3X8NH/sWz7Y/GXg4FyDwjFREig8ManKLusDri6pYkSHnO6SZu1H6 + + yZy8Jc5651GgdsyLXNJty1zOx64UrHCiUqSChPNAwari/lhVpz/h5iTiHf7QYb6u + + 2D1vvQKBgQDUHknI6sHa87DWtHEz17b6HNeEHlP5XBI+THia35LtrI5NUxphFTMp + + HSwnZmDufBVd2Y8f+0+vIuyZKvZbp+YloaTfonm12kNSQWkfwKL2cF1SteKcl8Aj + + HVrd38q2YwG+QV4AHmmc4xU9LySlNECFbT7sJFkZlEDtU4qVCqk6mQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:5zoan46gn22bdnxt3z5a7dahyy:o7wkn2sawrdpukt6gdoh6wu6xuxcu4k556mycqtfdhhhoqwfx4ka + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAw01Lm2+OJNohSz0WJZPv3bY4ntD0NDLz3HN6LpNW/YG2+QeE + + 372TJhEORe/V9yNMzxuntGHI27EtsBNy2Ux1IX6ZoJyTn8WmwTxmAM4cnWWVhaFu + + rQgPXwhR/DGfYrsMgg25m0t1y8eB2n7cZHkLRDDePEZdk+54ZbEwrC9hQYis+xt5 + + CyLgpnz40/4ubnwIcifM+QZKiYEVz+tmlFyZPJ3wEdjNAvthQ2/MH50SCxn6JdYU + + OhX/IvJfRgO3PPk6Av0NhN6pJ3ifQscfwjzDtdiEbeiNUxsZggQ3H+taIoABtZ6m + + oaghx0k10mkgcPrcg2kw+qLCZEYoSCyLHsxpxwIDAQABAoIBAD/JNHrpNd8iYQJe + + SqfuR8a9V4PDUibkR1JGYu7oT16PqY9vHb4nf/JMWsGLwfGsFU+FREI9N6lNFlNu + + HrIK7yyH2SwkR3DE0KBHFjeIGb9saKfS4D9iJQcQRBqeqGRKHB0z1115iVkLaYVP + + rrKf+AaHAWZlQvXoSmlINFHgTZ7lrvcBM9iJ2ix3Q5C3rV+wdNrC1j4RRmv818A0 + + 5nVSuCt3rH3j+xwCXkpxzMa4AJo3+RKy41/2uIrV+DETUOnY1uLeHXAOVj+Jycp1 + + leo8pyue6+G2nyK9xCgnSBXTDEk1Vn1pGzY83deMpnkdY/wcAYgBt1dbA+59xp4m + + 2OMHd9UCgYEA08JxY0V9DN7XqBe7UmACuMD7YBxjkmdkFDmJVCyIu1WnL6IDQ1CY + + W57wpnoUMMNDsbVrK2D2YAL5A5yHxcrD4xS6QYhCV0DoH8MGghrIs9yhRH34h5wg + + wSj8HxO0mU3J09oGvFOBlFeEJd8hpuj90hJ9EUOvFwB2LtjOOvozMpsCgYEA7Bqm + + BTjtxtXRuQ03WM7XmSX/XZJvWEOQAv393LnZDTVJVjHKmzl25vF2/l0Kiqak1Jdu + + kw9ipuLmT673v47/0LlTU/iYP/ZEgvbpkZgve9nWLnlRN8gIwJS+P9mDbyJloacL + + qeVhEPsUxSeWnRCOEsJbEU7PmznJwPjl5fZwskUCgYEAr1Tku1RSyPBN0VDs+bSj + + LEQlHpwC2bqfg5tsGHTTNYEi726OkxLNQ7ci/ERCKWnTx/U1afJbrH1pntLhHCTZ + + 8lA8M3xVqZcFWx8IaXsxyLKaGHLQ77+W4zhDIJwZQYHF5ZI1V4Mw3BlmQlEwtNlf + + J6vFQCExfLMWJ429m9mDwJcCgYAVvApGdswkvrA0ucu7iCb+uSm94moPlQCf1ePV + + uuIJPjuHDMRa77pLXjUXC1eaFeccjugl74ekV0TeVvwFjVNtUnIiS8MwOCpsZ/Bu + + b7UHULFPy+k3Gln76HVvCUX5KBB1BhyjwjLiTkrGL3PE964seenKORgRcQtqkT8Q + + oVQUhQKBgQCGXXKYWdX/mGxXNEnaSxqpQKOmQwnldsPggnRA+u3M5pDIImzt3nbR + + KNWavPy6v/v3GLHSCkMvb+oor7qk56YiHpfmL2pjkNAiwZwcdUky05sfHvhs+9d4 + + qLxi7Wt2LH6aidBK4feMC8ReOlu31JCKWjcZ8RwNNPEXbxjtOv1Eeg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:zvla2jyu5fqlb2s63zftyfjnla:yqspaexhew55cvv7w2m6czezhzkqnyk5fea4gvnplc5za4xlvbva:1:3:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:5c4mykwk6eqqcbh3slodybxfee:uzkht3h5m6ianotz2cgy74zxirzuaxtkxpcy3ghbafoime45n3hq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEAq5KchP+y3p8pRzcw8rMZd1Bii5k3b4TNm/2jqy/3jUt7JY6T + + pNmSzPnTQVe0iz2Seyg/2qynbX5GcgQ3Yon/XSXQSxkKmVMSq2emWu61G3k0y/fs + + KpblK/YLGUiXvaGZQLeB0jlyaaAWMKrFAFcJ0Fg74zS+8rfeOQxGMtedKJGVBcin + + Q7OgC8JjLBPKlFgossBzZjZRguTCd+6gzz+1j6aHSgPVYjjNQ+g0U//zUdIImSgt + + tSXBDiOmvRWG1oxdtY5xqoY3/H2HKJUNK++Q0D7BLV6bQrYWBusf9JxJbBQH6ite + + Vc5RMW4b/tsPJHvbhtozZO/ByJ0mAgy1QFaVxwIDAQABAoIBADCBDLW+0fME3PcQ + + n8plHpRwCcP8Z0MkMLpiTMRnFZ2A0sot0gifJ9TB5drJsDVTDVe6675m5BhcxA6U + + qZG2gJZ1S7sHU8s/xH3nmgyIAnRHYkktiDsMGLLCZqXZs2g9SKWWm2FysykwREWy + + 6WmssY4Qe7HCZh8ZIv5OvYO/F+NxOSHPcpX/ubbypIlIu6GhhTkqfpw9a4v7IGxk + + 4i7J7rhqC3+jq5iU3oeWGwUXxN/ZVwAmx5V1iWgz8Q+0Khc55od1BgpLU49hxrIP + + qmY6cbiuKo7KlgyuqLBuOrrClJDc546sGnbvudQf6ENRjDhY4p+udwXUSBuCLCYx + + P4Ud/i0CgYEAtlnYKLLuPIq+jwMxefwJtWhoV9qX3sQw2716+HGCbemdFoPLBXia + + 9VGZ4dbx6V+pa2KE56x4s9fe1cpFOVfaoY8NR2hOgy3n5OoqyGv8xnTGqdFGDDDp + + mC9a2fKZ5QCtdDCosMthnT2nADr30NT0RyHVAA729zrTsxC/uTDNYDsCgYEA8N5Z + + ymG7j8dzWvSTLy/FAv6hF/ovPh2/4df33EvNjLPgzhgC1qpuOH7Yw1+CbCMOG5Kf + + YXjEZBBwa4G8mF2NuTriY/ndezhysFGoWagmd8UDm66DnhQMUoYJJR2smJ17XcRc + + mjk9Cx0kvGw2bg7LSq9wZjM85AIandVV/1nfc+UCgYEAitKpWoqmDlc+LZgrwYdc + + SMwcq82R0xkfbRq6lIut1UmFuw9Ir3ia1+pwsVs3PgkC7OrK7akDFz9fuPjNbJNy + + sY47eMJzCzEWmtKfEYgMn3VljQDyR/Ow0pgynTwxZwL2Cj/FHRsozFGUYvuBkG2f + + LswV4X6DC8KwSmGU5ELAB+MCgYEAww895dApxXD+8QyZWSA1SoyMRs+bjJEpACsW + + lXdpuWU+S4hUXCVe5y+KOQXSp+HnndqqaZQUbviFIfrJkRZKHFQcXFxPyWbYMgOe + + 8yRiKqIInv2/preTlwzmwQD78geujSvk1hw+XA643kI//fbLGOtkec9Ko1c02NaY + + MxdEByUCgYEAhy17HFcyGvj0QnwgoTxWB8AGqivfq7ZkCrBZ8a4jtNtNbYBiCH2i + + 9v3uomcjTPhZqu7W/wloYhsf03b4y/V4ABQHpoiGUq6NNAQoSu7/V96jW7K3HOT6 + + b7YMYzPnRAkYmruFnL5Q371e82JeQl7aK6hkxglVF/AeXKpEKDkMw58= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:sjzzvmll3obdgezri6tldxtdsm:5rcvg2egftpcrsli4giqg6txgz36xdackev2yhqdubbhncw5hisq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAjw57luJrvanJrEOiDtCSd09DWTIrDWKDTTuRHlabqUyu7i+Y + + O1+WUn7yWdcryJ+hQoH91gmexQ61krA7RqjkjFBRthSKeVhlEA7gFfFVtBTxHsqW + + nUwyKzlfIH3OYZjppugjyaHX0uFEVFbFPYa7iQHvUbWzzHwlBFbM/fdM7qfwV2cN + + IgohXyTeeM0JHj/FO2LlE7wbbzC+nxDrdTmzbLy1I3a1gWiQeFJKojuY0ONtlEkv + + hD0TS8lp3VQ/L6zFDdAmlBk/GnmiwBetGRJ8CniXIgUQbCYUg0G9NTPBSxKUvykN + + zKWXzTMRt/xkhL4UVH5XcBc4fEOzxYbi3akk/QIDAQABAoIBAACtU57WyhKPA7da + + toOK2+Wtnxum3evLvQtjDQj8+SO+WfSYv8zomUWDuFWRyXYqcY06vdjUMgT17jAu + + aCakv/Nkl//yefqbstGsbPcKi04804U9zlUuNndrLHV8vCwH4sxJcqFzktAYNhxx + + Yf9AB6DYHzYq2MYsRWVs4Vvp9wuwfaDvp/rJ5sndknid2i21ZLukrNXccmdhcOHq + + rDqv5GyyWgDtkxoOFLausInih4Y1IF83MtsqNdsXJ0USFv3jMyyHdX4nLutZvXWr + + e2c+08Em/cMYvnnRRnL1NDHz6NepQqHatLI8UdoZ673VmWXS95pJUHsn/wqlKpXD + + FBSHzHECgYEAxriXuwvlCom/eIALAfjVweHM5HDe/1OFN5E0dZuxbke59oqp2/rx + + zjrUVxAPh9EIwjVi/av5b5kf7TXJNfDb9vrKLZmxn1uohlqxSKmZeEmZPrlD04T6 + + EeNVH4HUdQPoVZM8xzUEKxuLlL2wgmfVZiayxg9Eh+9o57cbQmugPy0CgYEAuEp4 + + B82k8CvOq2IOTam6Nw/72uTxrvi0gBOsHuQ1iEHocB3zF7M7IMdnlHfAp+/4B9Qi + + n7JWs1Zn/L9O7MIHwDguYWs8kSGNWeUrmv2HE80U33yrTnA97pejy7480X9AWjfZ + + eSlKeAMvl/jC5ABjIUu4C/dfP3DDn9ktfbDonxECgYBdPjo70v36rt2/zdzcZQTv + + v2Kjge6wwWDNzP1ffdmIVHGGpFPFW39gdCw0Wd3frY69ic1UGACng6L+a/FotQaR + + YeXB9c7pZlmyCRYMcUAIuAgG7WlM86VfBVtouEOXUGkQ1lB7bH3zOC6LcWJEHjJ8 + + hwX1dy6B1i1UJI/O369GVQKBgF0Jy3s1CLXvh9DiGhJ/Q3GU8jNaLeGF0apvRA/8 + + akI18+DWXelzJMCxqss7gdnGvlNFd41j/X1ge/MPqgrBEiSquE+aUeN7Kt9dYRxI + + Li+C86y4Rcu9wqZ3i8vKaO3i7lwdof8XJ29bPGXewpVU1Lb0gSAZbM6cYUaL3/l6 + + nJXhAoGAZhDKzgaBYkOpsTDOsWFneBDM1+FjNDT0T8vGXBTod+8I06gVlcUq2i9Q + + ufLTXRPLqQWhnDldp0V2YI6wivyQ4ab2sRch4f8iY+N5aAPexrAd6wYxpakEGQ5W + + sg4iw5714ZTy6ZcvPxoa1IFBkOaLhfl05/Zw6jq35Y88gweZD8w= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:3idf2xqm5wnw2q3nbva5vmpaiq:7nmkh5q55omjloezibvyzvveq4gqeaivei5ypfm5vfuugwiz6hpa:1:3:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:2cwnw732f6pd42kjvbin4zv5nq:fzrpbc322pmjemwlhwn4mv7qlfmnxey2wxmcmuksyudcjbomxjaq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEA2C1mTlS/6c3YrjFVNax9bCyDp8WR+EVMdHQBNMrIxOsTkpXo + + 3fvN90vWuxcZNOY+j/XxLIsK551JdzC3PFUPICwBvBWhRNiC3P3AiIk2q9Ju/8fV + + zm3Aj/fmOMk4Yy9cTTmXgk9YEnpLnhJiLni8au3hZpVHnQmfTMKv6OrwKP9DopGg + + p31pfZgoUi1Yfc/wpOVpMyJUNMAgrUOm2s5nnoMcNsA/pxVdmS/Zob9q/78Xh4VA + + 5uYCBVj3V+XKBvNg8xlmkFDp3CrsgjhG10Nz5BpB0ucdXfnGaId26IGHoGrlpzLL + + C1G3bX0y7EHHjBV86G59pVdb4zV3TSxW0mMPTQIDAQABAoIBACVn1agAKiT+pVue + + 1auv6RPqr+071oIrG4ua9wp3fD32nzBiGCUxCPadfM5qtMXegTzPxad7d6uUH74s + + A8jAvxlGBBbTd1A+VoZ+se3uMDOS+fnwTiKmAwfmUUPKLaOb8lC6gmjd6dNoreTw + + MWTxJ0kpWDMz6WxW2eWiWmXnIR82msDgdVUnhdUOvLdD8HTC2HV+Vn9CFL68k+tq + + Iat+G1BEeFp1nDkLbnH2zDMLW8GUt6z24HwjFbHbVkgKa6t92Cg8l+pV1sNu4jt7 + + aU2+AoKYRnWSSLedBkNjSw+nasK3Tg1f5/6xq//hiCMPrN9OPL3fAkN5QLjRW+EV + + c9HbIYECgYEA8XWQQU+6k5/rrkNJh+UoeeH4GkgFUSlzq5H4b5iQdQwSzY/FrZbW + + 1R/S1YkVqq0fjmZjCjTLItBpnbfCt3lhMQ1RTBi3fs6spMjY09aGdJeFJn/BGK+7 + + M/o0p386LOI5VHJtSKdfI97tctOTJ2jvrL8mVJ+oqaA3PJzHtz7nQ8kCgYEA5TIU + + d1N/Z4GlNnf77mEishSs7Ln6J/VTcNzZrzsF5fd9NMKoEPcO9OSFa+ZJKFOyMwkl + + haPY6WOv3b+LpW16/OvntHPbfirk0ruAwItdLva8F6vOYDOrEezMY4bXVAM58p/S + + qYWXfk0mXr1kq+Y3Jk4KHwh+HFE2pqHqPybJSWUCgYB4wOmWsA/H2jdcXAw+6QyX + + /7k7M39tOoS9be/Hp42+633PzbH3gTMJPLQM1FTAmXnpliy7ovFgBMh89rRrW0mO + + 5XEd1FKYGTXf5w4Ayw1M66XMPiHMfb3qXZvNlGP8pFo1cFBVAFclMkyfm03BbMpI + + IwRBV+NaiWR2bJW4f73aeQKBgB0o2/W6h9ERa4Wcik7vyMxDWSTdHHiM+8q2LnPe + + 3Ic/j4xw35UY+awqjtcFe3VIALoBheaUy/oVlsBtqESpwyX+lYId42UP7ADrnhvh + + Hz/kYFXao+0VZcRoDjDzbN3hczPtJY4v0vBcvG79RZuhNI8JCrycBf9wTbWxj+3s + + 71sJAoGABKJgNFvvI5DzXXkV8V7arT2jv08AlPvf3HqJ0V6Fw+VV1sfcXEGkRVKr + + VleFaNqo9zt9atAvSNUTidx4AWL/xlUzhR97lzdRQyhbJYa3T6mU1JOPD/zHJAnQ + + xiQGOW4ll8c+ht5wCademva3C6k+R9/pk11W6JjeTISMZ8W5ICs= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:75ls7trk6lfklxbrush6ex24hu:tho6cve73atgkhgpvjd7446w6c4wlta5bszbfv6qhbs5ykjltwvq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAo3aCyqOOeNyiAhFyMMUjsC8yiJHP1N4AQtNJnaj6fG2p9oFH + + LLVqXIj+9X8wFQvU1APqfp0ZhdyJnCIOmiZCWGZxAdBAKMupEP7KcARD8r3pSeiK + + MeDYJx23rejrtKYjJeJAeocIj8x9vcCNXpimlN1uOLkHJk7FEvxn0qmCblfqGKPc + + xFBsBpBIPKVK9SZ4vOPa02sKz+CgoCLxRSjyLj9XgH5+FxU/O2LeOnrq0TVttvsW + + UXILD0P2IsIZcQgXszyPoCkdqFZ+GgzJA09ut/inlDtB2Z0kvNfrxaqOtTlClrm7 + + 7zYclePeL2mYP607xbqjQzfQAe0hrlLR1L9QQwIDAQABAoIBABSgpRL0PnYzBWtf + + Dzq8o0By8Zy5UHGWIuX2lWtvV6NcZV565DlDRWzwSW2VGMNhzwAtjv8I98pkJlC3 + + yCxHWAehbxuhpM8LxZskQ/XhxpSlxtWG95V2wGAjSGVfp2A7DOQVdTnhEMFbYUy7 + + ipDIO6aSe3vDTEssaoMhqz+yw10FctG1HANZLxStQl+SpOm+iNBUuSE/m4uz5OFy + + ENoaDxgWyar9OF2ZvLZc+hg/QaQs7pAP+z//QyGNVsq588aBA3Tq1J4tfTDBlyKl + + 364z8g2RN5Ap2hW+j1C2uT0pUD8wjkaRPkdGtsieoutCX2PaCRcoQaHHZ39t7LIM + + YjcdT7ECgYEA4/R5aPJLWd3soy8YpMzRQ8EtzDK0yOeNe6RTFKfESkBReJuGBbH6 + + VS9nETazREJapY7y8tekppNSsN6oMCWtJX9EjcLELL4ms7o3KC5IeMI+TwUpGhov + + CZTiem5b40mXimteB2oREcIFA2EucTua/CRDqvmiuhLhcyZejk97jlECgYEAt5LW + + BaDblWaAeo1gRATyumg0vX3MTwXOR4iyz9yJylISMsSLPbSRUk8qLrinBdFftYwz + + GrDEXYJ26Wak6b1JAQMD9GY4hnbrHFcLB8JTofV7c9Aem1hKOP+KhuJFd/aibBBH + + CZKQUvUCi1E7fQA9iQX6qvDmwDxgvG+J783GbFMCgYAk2GI7bVZymyVhpv4jvRti + + CTp+0/9Wrd63inMHVqqqmcTRasn556+fzz6okJ/fO55tPjLUv7hUWGG4RvUGe0CG + + XBDXnRCabs3QpRu/OePq6PKrURk4p9zMfq0wvt/JWB7Pd9VF+4XwydyHlFCuasT9 + + Vls9qoX774tTUnNcK0q8UQKBgCscedTCjS8N7nhZgVUYEGUEmfYyd+vLAkG8cbnt + + IhL4qTtw+v5XzJUW8GIejWMJY7/AGDRZdRQ80m5H48zc3is1qRUZeIbjoJ18N6Pv + + 2DI982skYju7RVsTcFXzB7t/mW9ldzlhSTGiRqGvRxg5GTp3xAGnJ5nX1CQM0ckW + + e1XvAoGAfdS4gbE6hbLmXupDiOeT8/W2FL36QCtdXMf6TfI/n8CEsAiuKsxmU1PO + + dh5f3uzGlGSuk/aFxeDLcpKkG5PkaRS6Ltpy3+39dSy0qhSiZQt3cddW9lFj/YAv + + XConXKubaYCYzR4XfkFJTbbS3oHv3263xIaZlplH0cgb5EBO5v0= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:o7xdokumtcukutzgmmpfme4nnm:nn3s5gau5dychy6wlodwriuit4wyavfze6bo4icywcbhdb4ccxla:1:3:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:saskbmnnhte42buehoshph4s5e:sgy7cr3nt57e6rap33epd7nx7u4zczj27mwcix4kfiuyyh6fhg6q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAwn8K/miyxzuWz3uOVkrgIDi+EAvbgh8KVfA3QBrwR22RONhl + + t5eTvdFj5piqIFfGzcxcAizKI2XNVH7iKHWoJJFGFegL404HgW5Oz11zPIahv7qJ + + a2KtCMaZF4WkKeirmcIryLjROV/j1nCsnatkYDc3BYUpdnGNHoOzDccoX/Aun7AQ + + IM/FavvJPTb5vPhWpely3yZluzO+rqyqRoZBJIJ/16vp+8AEAzLKoHiHvvXdG/FL + + 9XJr1NQ1Qai2orM5ibnda4cvCgSBH5QSRN7ZSkM4avQMB2ZA3iJuiOQJMOwC+7Rj + + fMpzXMkx+eVj8TDaeu29VHTdkts2j9UR+etj6QIDAQABAoIBAAeyYlt+BjEnNQkh + + 8RiOHv93b2IQLhAgrVaISo9xYXfaKKiQu7m/uFuHKUZrXTQpdRcY0r1NS3SKJ02E + + Nev29//2dckRJUNKB7cCCAFhx9kp1MXTGnQS9BkITu+k3MHB0OSlT/lCAxmbp1cJ + + n3Mf4LmEBdvkkKb8yGJgQNo3OuxM8coddIMZp9pLJ/Yin6AaKgzaM1SX5HUgVQz0 + + vfY1P38vkZRk1/CN0nitzUm8/PVvUncjF1jnaHglYvy7SA6XuR1e1rNWbNkJ6Dhi + + WZmRGZSUOG8F5WL+3Ib6sr1996TEX++8Lp7IdE4W1Wxw+kMr9xpySb8INg4hgcm0 + + nzwrKT8CgYEA3avzL8w/de2nZogn3tZBVxEgt3/Wx/ZBkMHdQwI3kiceG9HH3L/d + + D9KdWVJP0IDXrqC0ymm3sxnKLz/tct6l+JR2p5pI6uPqcl+HAQRFIGV8WLodH9Hn + + lifonyLFUmUDE7/rlMEKfwOxJGMFq1y3aiOBe7v9izxxnu8JNZg4rNcCgYEA4J29 + + HEpID4gWhQdsNezOYI96fM/EYhkqOm67E9z9CBShqZETvoYwJClzJQyW53ghcuPp + + MqEGcYHaFmFzuNindwp9SwWxvJOX7zvGZNEwPOX7I3q2/9zUinMuPVdXtGeFkIMW + + 5m1E9IqIewebyiKkJwKLYTMyEbL+pl0wpd2vnT8CgYA9D/HEd+n/TUDwwI7jFngX + + SNOPWLrMiGxVOOH/ZGv0aawkk6wPhhaaFjVb9o2f7O38364NmAOPZYpJa724B9cG + + W7c3wgtWEQRzDxd8UzXLj8kqE9KUAlleBo5Qz941LTgkx5hYeLiwdk7krBZStw6b + + QT6Y3BcitLrDwiryRYVPLwKBgGNUnmrCVre3oO3XaH04adO935cOcnRHWKtaiJSy + + J5vJM+y+4ZJh2SxEwEzkEl/ueixKqbfgCe9sUzuOgRR/ix9TnjDtJbqVMp1zO7sd + + 300vDy6TeBYSXFOVuB8cXwbCuQg9UIU6UUIreUufA8ASLbGqqGSltUCqfX6ou3i+ + + XokVAoGAC1g8mfAZ2jAqhm0+ZDnETP7TduBqGMTNBtrNyF5L7SpYjfm5Z3WdoTQe + + OhwKIGVf0gtfQoIllKNtDymxpM4f5rmB0AvnSY4Nx3OriAVfXqXrYA0Mk2OfI3qa + + IPDclojMdyMF5Ch4Bf4WQvbE/sPbXFrFnlt1FXUIv6KkUYzToN8= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:drwxx3brbk5snzvxum7edrm5mu:io3zsepo4wtx5zvsgabwopzrwe7ym6qymgfpt7bdzayyj73orqfa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAyiq2CDqbIfT1f7icI+VESHA6R/j5AthU06WgxAvb7xHe8XHn + + z6lN8YvL77zK8Jg+B36rZbw2hIhH2tQVWUx7EbXWgSFUJXuYT1DSgM4TDhKQRwwn + + iGqcLjShxhy4bn1Bgr+JCJHdPZhhszn+prKCPK9X2AtLGbBo3FEIbbJTxJFNlEhD + + hP+mUzHaLjCkDE2CaBABKexSYE8aLFxbOuE7IaRwRbJaxx2Wm9rMH8BXM63Dabve + + 6eqjiRen6taW1IIhFI4Cfcno+Lp+cU8AR7c2Rryxe/G4SzaXCGNYmFumrzx7SQv3 + + RndTofKUfsnixPwZ0dsCi3jI5xLVAxt2KoGvDQIDAQABAoIBAAPiNGR1OtUlWnq8 + + IUIzbFRrI83wEQqtweRUBsbvzf/n0VOJq+XpJoFuVfKzxKF74MEruAlCZP3eFgdI + + Zj5IVbhvfbHnHPaWmeIVtzExZrSJ2NSvB4M7eV1JGNs/J3Tshl6bR7a9szVIXCQc + + iCJzRJPAtNxVGuYIUgSYiSPgLIc+FSo0Z4gp4fp8zHDK7ZBFF2eKQAJFA1n1H3GB + + qpBWa5ig0IIAJGjaphQqPD14pWSDAIxGPeESGnzJbiSKau+5gEcwTwuMSREdoGlK + + FOQOFKCw37ILB75F/h7KzJjaFzC6LtiZZuZTavq78HDhJVSILW/nepJV455XQZso + + UgLRhe8CgYEAzmJ/1YEa9zt5xigz5q89h6BLEIf7kI5609dUBUleVvLjFq4Ys32a + + fi8LnijUl12EcST/C6ni4tgiw3Sq/l3lZM68H+26pLnK8BVdHMF6cFwR2Xo22lUK + + xmbD/nsfmIohTJVMpMQC8ClQgOUpnQJvzf3plvlol38lGwOC9rbj0f8CgYEA+sSg + + +uzi1TLjGYa+x+WnRRVAF8Oe0yAXA7wY0MrnKQsQPBcmuoj3abi5mv/+JfHgXzfm + + QJeun0uHcDHjyAQ2tDvAna6sc0DuCopE7Nuvn9IiDoL0dtIttK0qsflmf42WVo/4 + + pDz03rpuTFaRbMv6eZAzRNUgkkZ1FcUsWR3qpvMCgYAbJUGDJ5QQaLY/phINiYci + + S6cT6Y7hGJx3OJ9Igrnx3ciYtxVwplinuDBjASPVNOuyphcVxaaeB6eq5bGH+3ms + + pLSBzpb6C6Xxph21Jo2gMbv3SufkF8NvDR1CX5dsTN7MX+bQ1Sc9x3FbQskSabui + + 8H7E6NEk/Ag5YWDcannUqQKBgQDtavx+lYitEWCx6kD2QRf88AGefjcA7IDdqFhW + + VcRFt5PHUKP6N3MHRT104qlcg4RKokH9JZ7OclPohVODK3ofafMTVy0ucWrtz7sy + + BUxhpDFaS+HoHVXomYqytc21NfgAPI7L8Gpl9Vw4Kj3FI9og/cWMhbwwwURZODSk + + qw5ewQKBgQDIOuJpbnGn18SSI0zat3hz6pFpKsyvk9AcMyLiVD6QJCwbp+fUXe7E + + 29Zck+c0djHBEBWivHbO75dHqWp9ERW0riwxSu7qUIgW73yxKJK4tI9nXa/yznlw + + MULnyIHM/0c07fKut3vRS79Jm+6P+bjUh6KMCIBbZJO1nE+96c7S2w== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:vws2xrl2nch2hsptqb36yqqu3e:fhujsv5rkhyiqstrktjvfy5235c7gcwekyd3gux3bv2glsgstjga:1:3:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:62g6yna52dvu3dd2ccmtx3uvhi:3jrudt5drwfjwqbh6yfph77rfgmtpxflnijmdqzp4mkrijq2ksnq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEArbOweiMtfKQfeHVWoAU+zw25AZs/mD6OuXicSRxSZjnCapUR + + tekXCsB2fM3CjP38HV7ofiFKoYUSHoD9VJ3mXyFmOynosWWjkVyeXc2o7t8z8rsj + + gWKuHwyFMuPZo8EEEx8dWSTMMprQkqV4tfd3xZelgNMBc0TLc0hvntzlT4g+CzT5 + + 5H0VKvRHCDVtZnkw3hNmWuJNiSBkBRBBfoyJLa0HizR/o0kQBI1gkXBmSva+++Zk + + 5pe07cCyd5cYVA+JD1Fvb0AcyszctyOcIFlpW8Ysthjd/UhXny3G9zHNuNqB84Xy + + 1ykwnMIaZq0/r0GfS8BF1VlVqYJlYhE4lF/RBwIDAQABAoIBABoKDGQa3uhG8ELO + + EEjX0HUYoQnZHJz1j87FAmTBXqbddMQmiaukACTH+ls2OzqInqFGh4LU+cuh17gD + + 7TYgn5bWOm2XGD9ztaQGZuU3/eGlSzPRkv6D7QdRiKw61PcD6dj1+p/Q8N2LMMYz + + ERfyO52+4Hwh5Z9Cil9DVhxSD/wueIM5zGWm6vOqH3mBhNK31D9/QMiWUdVFb8UC + + uESDRYcEt3R/r/AN8hPMptyQRoFXJLiZLt5ca9j4j4E3bNq0JQ2qfdn0nTjpNEQ6 + + zgacohbJ5ute31dBOf8Kj4VEw0zQDzm/vNoCKhj5WFjG378ydL9iMMxe9mrl+/oM + + c1llBF0CgYEAxOn0k2pDXC/lqW1BR4vfrzxH0xJHdl0ro5qmxwg5wgf/pxbbA+od + + 3XhrW77Qj4kz+N2t56tMgr+YaVAK/iyWA6c+icG4HLEirKJWA6wU6ZCPHCpY5e4q + + w3tEUH2WnwlrGo8AGdzd+8LaF4GyyP09XqHtcamyErhmmZ1loPhcO/0CgYEA4dKx + + lwyvdbYsMzkVJ2XskJ6XE1it9KPgtmXkMCCvW8U+7v7QecNBhm64o47pMDwR6IiQ + + IkBatSxV86qQsw4boURIbnQ7bSZAnK1DNie4WED+jc8tt4MERT6r3JkaIbubi0Ck + + lFzG5dDXACRovNBQ43k9xrktREY9h8isBltlNlMCgYBOlfwo1PDbGrZyXor97cGw + + osMbZqEkiNyAp5jFt++tExohagqwTj/rAkL+U3HSxvP57yaXXZLkX2iJJwusEskv + + 3hAkVC6RLNRkx0jCoGucJzgmCnR+FwX0C/7gjK6O++hFqiplJ/NjpYj6dqWOdxqF + + 6OPlR88sj3FK/zju/A97VQKBgB2kxdE5RhMirdyvgppgY9R8LQLKIlO563amG3VB + + 5SMb2m4PHxjMy940zKIT0YKWcBdhTeJhJkcgIcxRuJr4oCHkT8nIEkD6w4KNsAP8 + + 5NMY/RFqf+rWFQpt9quHoYmKEhoOi0w6fZWPe5m2LdWTVvr1YGmkx09uFQetDP/s + + oXWnAoGBAKbOfQ3zJXUQSrBlWJ+mQbS5agy/bT0DRdkaHuYmXoFZ0nokQ6SeUeTp + + YcLDmXiXYzXmsS+I48myk578dACfRUjOxlifK/Clzq7ntc+FfGx2cp2vHBIbOiow + + iZswZxsmQpafxMj+NUe2GfxDmtw/Lwt9BbpMqSsBYAsnpaZcWWWK + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:6ge2un5djzopz4fgfmi34eajbm:cqgc464puzka2edig5ofmwvciu2urojqsrdnt5jen4zvsdnkfuja + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAwzTPdh1mTkZYtu3zkzFo6oHV9KW+xbdnCKojoA3Vlktcy2br + + KJZBkjATEcO/S4YRGRdsn57efyKpMZTMigTt1DyNHyoTYULNV1X6Pnpujz3zHgkb + + FCPwUTp12C0XhM2JtOY9Y5JO1dkECFzd3GLMHCGSP/svLa0Xwh9t54wrdkvl2IKr + + 5VvGrb/ir6E6nFi6kL3LomJ6iuTHiLx5MX7CYQieXdy99OCUbcXVOUO75ZIPG9hW + + /a2cXIrKdgMVh646WV3QMgC6W+zdAHUvB63UyWCRqC2eUicu0v9VLnTo4+7WfOt+ + + o+eUtZ3s/wuGhEmJ/DyFGZwrUrdEVsqM4biyJQIDAQABAoIBACkNVaXy592FSMnr + + v+JQLU7IEE1bgAPHnrkBQu25ixYI8lJqagEGnHKYfqIpRvUklDrxJKxq9kLJcMiX + + EO7ju3p7Y3hO2nWFXXbFA5QZHmAseJDz/EhfiH4kq7zTOtN4gEHVe8qRbdfmREVX + + 9maPNnqiCsY+1nymHs1525yq60b8r2q/mYyXCon6lyIUtuzl9fkHQdTvEBnS1zaZ + + P2f7NHtA50qgFWeRiQWa68TNzv153toKDwo8sapJ/Rw5IdTOibttC75rxNq7t/3R + + 51tzyw6+9ypoLLzRFWFo4bveI9zMxXLx1+2hy3vnt3fAKAL5pEHS439sDJ/1aq5z + + jcNXXW8CgYEA/Z6Toz0rXojny/Gg6ya0JMhJX9KTtA3oLkQmieEjF+xVmO/TlvO1 + + /+thSmAcj0Pd7mmt8hueNss+VtiUMoRiveoYDfbp/WFnqbUnGLCW46Nj0FSBFsMe + + 8vlvkzHejA0Fp60T+bivnLseYHX/QbaPC+bUZYRhYY1Qm37iY5NT4PsCgYEAxQnf + + WgJBDAY/9qIkgvRi+U3g+yobyJ35yLUvBiDOTDXyv6xwOHFnDAg/1SjmdyMYOksB + + dtRgNxq1Uuk4kxbA/Hokf5F/AlNcF2BVQ0+qmRimi1fUCMoXp/PIl6a4hph4j/hM + + 7fmz0d6iElX1AkcEA7Um8LR4gBY3iLP619UEj18CgYAIa7t7MAzAlssbempdZGuW + + zQ+inttIny2WW6zr5w3DPZWZ/lyIJo9kb+xLC+Xm29oCkH+2CjS2nQj02TwScVLV + + +2/RBuG+B/3pJJqntzVLWaF2yVd/6fqdFqsduAornEMTzitbn0Y1bgEUMtbG18jo + + HEHxHPQeyRJkF1Js+/dNAQKBgBNnc31zt2AtxWLOePYEhzKx/rP9Y5sQI6cmYKkj + + 1e0favaBTtPgJxvCPDcLvhaBeENVW6GOLKOAl9bAbPffR8YVaT6+31klSG5s6Dim + + wdAt40jZr2HmNQovMdPtcUKgBU94TmspKhJC8IcJvAUrZTPQRTNzMmK6zWFDCDL1 + + IWvVAoGBAIxc0Zx74SEjrXDFfALloWGR2wisDA6XXwqdWzThVNwRrTgr6u8V9icW + + iR5gFi4Akp4pmbYVUIKKgEOmXbOdtp3wkcstFFi128uECJEuveQeK7WqEbJZEFSR + + BtHC/5tsHyVRg/eA/yD0sU38mzoeoU4zpMJDy3SJnHrSMOaVkuk5 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:jvi4htauhe3qxdruqqxptzg4hu:r5gy5gjgwoqxeffc2g5gsgm274i3z7jo4d5klipof72zw6dmcmcq:1:3:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:m7vqkjrvlu2kidmivmjwfbmtxy:4t35eoohvrpaomfflyl2pjxvpjb624ytpop7p33zqshtmxz25rta + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAlsm5+iJWoZQm5tDEpkgBP5OnGXNlk7p9jgc+z7GGDnvDBzSZ + + i1tLXjQJnQc0aMfJo4tRn48NbdhTWkFYSRfvq1oolO4xGEXxOgxmcIxK2FDyiexw + + UMI7Tiq5IUsCju8vI5AkYnLyPuPZLS9g2CYkIFXGeE2C2ptCXtBWMz8wH4ErzlAz + + Wq+B/erS4JYLw3Le+QCXjZhvDX9P8o+8+cKNb0+gJQeX2pa7E5JBC2V9t9ayMrnC + + q8M2K6pNUpl2prJ9VeDdoY0RBgA2ZcalViN0BYZWuBek83QmfB1Qk7/I5LATPTg8 + + SssoUGalhu+TDLZBVdeF/JwBDzqW7A+kc1NJiwIDAQABAoIBAAkiWzO91MWg9eJR + + jzgLcJfrV9oA1YxnZaeu5K0sMdS6xouvMgXxF9WzDUoH37LhN2PC0sT5o3SeAB6d + + ir2Sx5/3rDGpZCv2QLClg6cZuIb2EFsuiXc67ODFUcWkh5klABQFbU7Ra79HiiZk + + kldFqDaVO5qaB206roCT2kTsdPvTfXT1LBCKa6Hr/LWeoXFDNt5xxB6y+VaFD9LZ + + O+ykSIcxYSX6AYtglnSir8/EP+pmAM7XieWj3MeEgcFBlRjoT5vUaJgybAB9bR8s + + Tx9t9jQ/fICIDTWwZbpxp2fut438MFutKqnP9S72QSuhMCdosV8T05EL2lYUInzV + + Xi4gxdECgYEA1K1tlFXeUsiZVF46pC2+paPJwO7KmtfyVX/iKi3GyYfEQpR6ISth + + 75PuwUXLww473ydqHpRyYShZ8uZWy86/D+dsnul+mt25qNAnMLKuddabVy+2NX2s + + 3kUdqRE7DMH77RKxsfOKgmMkwbPz4uXasnblQ2GLu6aJbbxP2dLQ2+cCgYEAtYDs + + 32RZv+Mw0yMXwd5mMLbNLYOmfdVxvnvlPMid7j1QRsdrD2vgdgsbie5ZpyWMLF0u + + 1ezmqjxdCfZtVS1+jMLtMF1TtELAMbicFVk7HDgYN6HhYzmTeY4XZNxFkvMhnsJZ + + xFAeiV2fxQIpfES5M9W2YLpPokURE3UklBs5kL0CgYAaMrbh4+X8GpvQqb7dhIkM + + jG2I56Fri5hdceBhQ7xODPxfGz0kItzwjy+E/V0JTRKQ/aDz3WNtlnPmGPuuJWyh + + v+dAeBDRcOiy49lABXK6L1J5XfY7Bp0p0CfEMMwuWSL4ZCohepegUigv+EPdumTD + + QSQitbxpxCz/qIfJlE+IFwKBgCwWX/M3XfGVTvPKT2gBDJOCo74Nf3CLWzCoyZsF + + JA+NhyVaJTA+xOwHcK4FXnOSVEUmcUz3WWQ6e2MDH7WT8mxgoNqhoMZlfGfXbtpk + + rU4Cdid1Q9klUCQzlo0iUCgMtLrqfIGJ8JDvU/K3vrn3u4DSxZUjTFqfKjGuv67W + + GhqFAoGBAJEWr/O/5rWmYdEzllLPZQ9e2jgHXRMrlu2LozHqylEyJgmiZOvqEBV3 + + pj6hGSwX9Jp0cdqBaJEoFWgQh/ZYPnK9gydWYy/lGfIUXwIEfHJ2bG6tZiMCLw8q + + 0YuPnzqa1EW/R0vZW6J1BQHJBo6bS/Xj6NxTTGQh3S0dblebt8Op + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:zlfyvqls7elrevid5czlhls7gq:bt3bw33shbxg3suboavalydnot6zm3ftie6br72swiiwmwhn4zua + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA8XlSFU/GAVeRwcn+hm/CmqMu9fmkYi+Zll0SBiQjY7vCtd9I + + 8eZiOv4J84wHhvNKOho35oAvZqCrAWfZ5vEM9fLW33Sr+TzmeXeKkl13WWlP8u/J + + oXTwYM4oiqa7F3OHwzGrbrAVF09ByG+9ukwZhhBf2LHNx7/H851WMJ1TQ9CES9r7 + + w+wRwmxlFuhA9pqhImo4upleKq7PfymzEovIWEVeuaCNrfoU9I6f1HXKcVcmLauE + + 7A7Jtu89sdZC0jeXLv4q1YuR1j2GaZJQv5MuH8kIpQyGhV0N6rBZ3FZAlc6+SREA + + muUveyC6lUDCkznoOeaDYZmMu++l9th5k0AJsQIDAQABAoIBAAEJDSIMQoQU9QoI + + rK+04Pe6xWPGmz7Uh2sOoRono4M09ePDvlNTMo6gMji6G/onJuVS4XR6jjl5bOJH + + qLaFyBFx5hv1KxuZeD+DFLQF9JIMkowvHQU1NCamG6RkjJ7QHv/mQZ7q4FxGObj7 + + Sav30ZAyl8adFI3Ls7bGsOzqb8X1p8magM+yerypB2PktePm7P1Jy+x10kAdc/vv + + +h6KR32NPTo6QNNoIPUGsn+JDFdP+cq3zHVCZRSZhwsLAaVpF9Gx1qZjaVs9K8zl + + yFUomMfdlWFoGHbBlqx3GW2DH7Rxzt/qVLoU/ShKiZTu7mWeHSiSUVyrHlzVkptD + + O4Tw5tUCgYEA/jXZa1W3mY2mq72xwCasHlyj7fjme0QmVSbmzVI3CdbF8jDP/8OY + + ZpFi1hc5ub3wnEYBrCPyxtUXBgPwbuHrk8j8e8TFVoPIUTIGkvZcc7o3LycRwIAf + + Q6HXcVUzT+PVzLxIcoqkKDeyqCZthqSmpvzKAVl2XoksjBRAfT2v0GsCgYEA8yyE + + X/aYSZ3BH3RzvUsWsfOFamimZTxws2JRbBzkqMuJpYEWp7v12RCU/XTD6+5UORok + + rP/Q/z43SkqM1HhHP7hPt/ge1ZrcHmDsGdqWcRfM163UoM2e4QLnlREcXYBPM2Vr + + 9KJHMAEz4bgmv4gTANeNiVUjJvP1t6TKSoZgJVMCgYAzAd8UWGi0mOWehDuMULYs + + iW4jK9QjW7NNVrbs79g3Uy74v66cpUSJIBby2kos6N3EnY9sWPI3zz4FaPjvZsl8 + + J9Hxi7QE/gBNunnzNxep6O11uqMnOw4K5ghypyPand6ibA0lXog9wZ9Jehxz7cm6 + + q/JkfuzvXxrfKJkgCCak7QKBgA/1cvaNS29BYCQ9Uz8wB1xEXBQgrBLmxYqwQCG1 + + P7hoKy9mamM1ravCL9T2bck1Cef5dEC6RTALGDvS6q0i+6IN6YVsTjG8iQehWr1T + + oB3p7vKUoOiwteWUeDhLOC5WtlvsIwqZ/8wBuDLvD/Pv7TdX7hz+LmFnD1AvC2ua + + qAKrAoGBAJyIAekG9AN3qgHNBdGx/g8DWaviWbINlL8A/7PV11OEXZ9NxhQfxYoD + + fSzPe0tpaHMmS5g5G9+9tgkzrPIy4oD1EPwV/vGOwX+r3lL6RaNZTdpa5YT/yL+D + + UF2ApoYl77aXQk3OmocC6J3nq7Z7WDjWAcHCrPJahFPnWMzKWdHg + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:5anac46dpfsjumutzsoovvtlpe:yuc3gqe7m6s6xp7k3uodcg2g6k2bac32gt5amu7gdx7k43qnudxa:1:3:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:dhq6qvx4nkx22cugbnilxv463q:hzssbukng6i6a3zkco6dftck77in7go7gsjf2q7trdisy6htwusa + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAwVi6IPmkilRG5OvCNOPDKwHWrNKki412A//p643I2qdy1WqR + + N405gGIlMmWpYnpEY5gpD0F+TKNjLEjpIWY1GLbzHsBOkgQR/6KcIBaNjBJ5GZqH + + AwqHNjnHwmyOj+GIY0lLkqviXUJWf5Vbp7ngeWXqJ8i7eX8Q0PK+deWt7wSwQHpG + + mc2UHjmn8zbp+5zBkvlVsxBPdTB2r9Yj8dShoUGZw3hDpfWEkUhVTYS8awHjSDBc + + BPzFXzH+LeK7RooBXvhg16Ar7a3YQh3bBPmtj/yuvuFNSwrItjQRCRiXoBARXy9f + + QytfelzIiQcfPLAmZ79bwEPWHFvRUGYuhhj+TQIDAQABAoIBAB2qBkye4K7UhVgE + + D/TbaQtFKfG0E8jReGTes74PL9zUShsSUZtrUIIxDLHxxQ414h5BrzMHAmCxxLp7 + + qUEVlFnpX9289ZETjMti4H9P1oHCJ9BU1BgUWnBoZwyeaTUMDkfla/Hh60YRsoG6 + + oahXLWiSyV03QARBCYx1YeFmzsvX8PLJmD6mwYoO0e1mABE5ase59vC4GT+X82LR + + Rwm6gb2JE8Ko83lleAKnWOJ1ZnBXjh1V13TYDgsX3JDTYK+PrEe2/YDFm3LFf4o4 + + oWZAMnG4kc70e/MxEO4iZ4S4+VWB+8x4htSn+1VLnwXSIbVqbazcgtL7whbvMfY5 + + 0WVU1WUCgYEA00wfFvlPBXpvYsYI6Hw3atiSGtAh8RrkVVIgKJTF5Q0frK9v5EjC + + tSUkXj/Y0ssq/oIUZavKmK4ALD24rg3HV1ewe8Ih/M5MnBie/fPp7Fa1b+7HQ8m7 + + 5n9GP4IAvH5DASxTQadQ4yneLudKWnbG/fzFZm8xDJjltoPjnpvNXncCgYEA6kBk + + LC7+aYyjSpgJfAFbTrRgL6QlVmQ/RgjI9Afn0mWSJWcDm6t9RTJ27OZapaCadyvm + + OLsGkIRWKP5l2BacBR1FeHpPw9MaZb7QXt1WT+dL/i6gi2j+U0BxRvIjy5bVGc+b + + y80fjwvA91az8i4DWpeT2KlhEyBJmnHGumdzZlsCgYEAzouHjI6R9znyrewFgzUB + + evlPANTZiPUPpHOOKf0b4UZN4yDvUIjrg+VVwqfIzG17jqQbSjN+7HaShqyi3cls + + Re3a/28KiDQlYSUULgyDatprq4oO0S3e9ncNdUEgdSE7YGcyz2e9wwEHRnQjE4Eu + + DdNMJ1Cj8rt3OU19cGq+ewsCgYEApIJOFz11jBipgLRfTMgDILXKKwsC8bX7Parj + + vYVjx71vMncy8HsxwYvcOyjXFiRA9lpNFyA5TvqxK57lVSkjru/Mnvx+0g6KJlQo + + L8cPW5QbKUoDk4RLv5mtM97PRqYJyFOlnS3T8PiXLtykCPtJfbCfsvPY6b6uEhm/ + + L5+BSqsCgYBsQScpNkJMelNcQXA8XB3d2jD3HN5s8qBFi4rPaCsrL+/Gq+qu78x7 + + zcv+7hi/1R0G0dnPLeZzSUjvV1snksxnAjl8BpQ2zfkBxRPRsfVuNNgoDBPHZCT+ + + Aag+rzAJ8Taa+D8ES3pkoDJ2QiroClMmaCZbpy5SUMt0QGldlMAnXA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:3b4gpaaarpdku2s24mhbrzfmyy:gpvx3x6yrifjb3yrzxkzekewe7hvuyjrnqz3t4jh3bvby3bwsuyq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAw6dMaIBLZvPlxEoB+56rygwktOgnaWOp+NS/v2vBMyb1Ih06 + + qT2JIXlYUHzPqAn/a9XCde3Fl+srlXenNoH3WUWzKvvbfXf4JutygPoJfiAUsZCb + + w/MtxO/2Tp0U4KPDML/Lx/uE8e79OHwByUvwdgM+DED4vbqFAhRJGGU6v2oy9oLs + + No5y20W479nGhOF8jnxet0FiWwX7ONZtFimqBB77zg5rpBSf7Yo7JTGaBZtL41W7 + + YsyEklthyBS+H2DqQXiMONYyBgTwuSRBUYbBstgm0/gNGRY+aIJnnVtq/PedB9a5 + + 5m23qm7q9tXui0UaIGp+wo4/aG5W8D4xd9yy0QIDAQABAoIBAAmQf135bZY0FJae + + po+qH0xCgTXdxnVys4+wOMpvBlQNkryu8Jvu3+oEwFI4877LdFLNcZLpw3fMfYYy + + QfiabGDPFTXj94Qf7f/bES8oaffiMhjHELJIzEM9Fs2bhLaBkuxqZ9gYHdTk4biV + + 6VFxlqjyOiGHuJEv0co6+yLH6hIK1U7WJgsKMkdKKGQzEQt8mAqz/PaGZN9t+KO4 + + ovUSDyoCzyh4xiwK0lzhnoI8051Wg1s3x37mwimqbT9v3zU2IDWPaPE9is1xG461 + + z+ViexDRQSz8G2Cxm5LfEhc89wi/k9vgUb9nB5f2n8eQP2FQvNIOcA6VqI/bkhNh + + ja92AQUCgYEA8V+pcG040UqLXPZHszQPRbj4LtkDBwBqhX1HqzlQMHYHiiLg/1r4 + + Woe2hPL2nPxnCLxxBN+sDz73wpmOBN5fk3Lhz69vd4GvgX/5sChXFQy3o/P3xGCI + + rcepn35M4AJrL780C5gy/WK522/4zp33sPSBV8lOcAaSdkND1NUSALUCgYEAz4Jl + + oQH9K1hRtRoTbKB069aSneXtD2/f9D+9m6u+6D1eSZfYc3jLiIXZ1VTIeXT81Oww + + /IkjsHuD1LraLJyw63AcKPAK0BfJwhnLIWBKoHWZJoEMvY9Xqq3wnef0+Jfa8kBp + + LaiZ77fRhyGzPQICOmIBtuIZYiYjZi7gG3ibJy0CgYEA18yAL4znDG9KM/3YUsaL + + lPlvomrRAxSDJ/++8L2YDQupZ/4RDRxnCIFnVGvowqgC8lOP9ByJt0PDvU8OIxox + + dyFx8/3UeZMPt4cUVENsv9wT31iCvybTbBMjev4veuOOsyyOOoODqvj2U9NDLm8b + + ATFI5pSLNSsbDPLMlV897jUCgYEAyp4Qjf5bLg+2+JbVkKO8huuljfgMWZ5rlxsG + + ERLJ/gquHj3eZCH22v+Xi+6VMcNBfMaDrpJZ/uEcAIPStOzq83ksheydIkOYBacZ + + 6SUUuUkambY4sn9copPk9sqfMH1WlGTATozqgl+Cf+gwE8n6UvePpPtwvZ1vwz7S + + JQDGvqECgYB99QTs804jni1La1QdCdbumonHWEfMrM60csGkrGOjLiyR0xUwQyyr + + cokRNpIAp+kNNSgM5QRK7WKXjdKrrmPndnV+FUr4GN+WDJKs8lumCKHveE7Cn0YG + + I4hG3f+HgjdN6HXLN1wgCgP8yufvRwAbsIYkm9Ok2hRrfndxErdxHg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:fb6g3fkfbtlwzheujzvc2dn7dq:644je55ri6q5halshuxfesjz2afhqtebetuzqqbfecp6yhqwbb5q:1:3:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:nrfalxtfzw2mju7hd5xuvvqvhu:neuq5ftw4keuikytduj7ql5xmo3pzp4qpdsn2zt3magaivpzyrja + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAiPrrD/TaDA1eRnPu7gUE2shwo5Knp/+WbuH9TdEkY0HUa+G8 + + j1ohiQsILqaE+EdJRhmpHb7RE9ZtoosSTss43tlfvyK+XevfWy8XzUExXU8OhEEA + + +OYCvGPF1Bhmp1AXJ5HHLzieTiuY7dXUfsbz34D3AqMPRHUx/mN84D07rdFT4pDM + + At1y+vMb2Gjjb/iJP52YWlcWl6D+381JsYASccx3lWuSOMz64gtfaNCzyE3TpQ9S + + 47OCIf36VD8B5AW6E4qgenZ6tV8Auc+QKHmzFkxfTMeGOZOGNL7F0xxoKp8FlNZq + + XFkN9syy6+gTdP4ziWtzKl1Ry0sqcU230MCY5QIDAQABAoIBAAdIdAwOpDNE2LDd + + RCRinu30/0wrJX/groJpwJqNFqayXtV3lJt4mtTbAc3dK6+5tpMkFSJQPXSVD5I3 + + W7tVwcnTe+xBMCb1PhRujhDrOPExnV95x0/0hsu2cFPFElwt/XUsoo8Hrx8P4Vsv + + 5dLxyBCnnjqFKfAlXQmeB4sypkQpC6YpiaI80hkNB9a2aXZr/vc0IW5NUTPKe1h9 + + Hya4OkFs0GMuapsvE2oAhpESU7jBuAvA3t+mtFvStKzimYRS+mDKMHp68LWsGs15 + + KHTiBSCWIuWx5vs+r87UmD/4SjDE0ANiIx1bXxitS+NU+R1vfOS5xFDwKheeO/Xn + + BjIYKNcCgYEAv5JRvXmS5jY8dfY1SfzOcJYx4uGeLx96+8gUOpRNvSprZM9zliTb + + RCJu1ums+nozq3DDzzF6er7bCMHxQ501GH5LiY9tXQEkgYvqn7oFLs867N9KuEnI + + OyXTH0QKk0Pnmc5UaYOSMWtEshV0sS5wtTg7xFnDK55EZ3SNgk72m48CgYEAtwx1 + + SpOLGpJOCY/mE9wwt3xEd4r1/iBXJvvq5Z28+C7yJm0o94P4SDW3TquFrBMcjywJ + + MzXMcS3w1qODA9HkAw4+XzLIhgVHD8u0+DdRp8FDXq1Ym79BiVJC42LD8YyuU7M/ + + g8SAJtrGTK8nyfuSIm3v8jT2Dj3A0GwFATnDmksCgYAX330ONqNGywV30cnMQZPc + + Ves7kdAroSmrTMCwmCCj7TBa7LtDv64PbJcRcydaQ3ZC7BeKr2jK+RPEoJ6XRXUD + + a2Gwb846I9VPy4behsj0j2CRejYOhytLq6gGom0K8xBei2bbi0jhnbN+2cuj9NyY + + yLwx+Nmoit2NYunrjjmPIwKBgBY+cVJqs5C7Driiv/bR3yms9DUCsfn7vBuEqXrV + + vEz8h3ib80qAwv8jZ+8rcMcEW4gaddO/SeTHDGlI3XbtXqPwayvuY+fFZGlK++bd + + 8hJMrf8nWYkzqKcjU/WF3wHPcq/BLIq6qkgOdeKDtnYZGB0O9wWb4frBDllFhyYq + + +tYZAoGAHwFRUIo8mJXHw1HoHrYcCkfd541hl6IAj4YYMY62SyVOYxlaDUUVxEMG + + KX+wyRsKO4nthVDnkzCRXkbAXAdCatt54PGRRxg9wwi3xwZ5lMVa806AAwnXjKke + + TZ0ofqZaGVwqE+zo1gVwqM81Vs2QsKSP47yK2/k8xS09dHWp5CU= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:sg2kk2aboiazxpzii6niebisru:ddxs4jaogxyavypn5lxfqiuymic7ghlbiesozaq54ubfiqpjyyaa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAxz5hpr1q3n6XotU59zDx5oXx7hZil0g4WOX6xHhi82scQ2dE + + Kfz66yEpuGBktOq7Y4xhXC1w8BXY+rt02f1t3tQpmZ77mAZWbUmR+y9nFU0MWs+e + + SHKTSKynUT/AWy86PNdQd9bkvhIynGq2WUwHCpE9ZjilkZOZTrgjBs2IavmkkH++ + + DVje/KBSnzDebi79/0kBa+O90BiBIGNkfNMy8nsJJn3NaVwbsm4cVgVNjns0adDi + + ar8fxlzyKYlwP/LvODp1u38I+/9sxStKtzlVYiCD48ILrwUtu5YBSAs89xnnRIrx + + VJztUMUfXCY8czyThxEj7QGuac2HH/o1EWWDnQIDAQABAoIBAAWoxnJLgA0Y0GrO + + HqrgR4ayOEh4d01vvjX8Nk69UqYyXSem978vkdr64qn7hvDCmBcARkWtfr87B6I7 + + j9qfQa8qHJJh+yh6yZqqE8zsMEPhH+A2dHr/UiKm0MvUgTy1zzQqM31r66xgbPKX + + b12C9NI+hN1x73X+mMStI0WOsfjD2KgJBqm4Bl2b/jBEnr17DOVGAHIvfSyjrObk + + hChdjgBQaiW5L6qv97f6B6CTqdk9Z3sFIDQp3oD9veim10nK+6c5akQQ37MFERdO + + k4ariqAunYP5NcjUeZWEu870eZFoQR3DB7ucza0Zt+FAvw99f6ijvX7nteVUpZhC + + aqLrbCECgYEA76SYmfHhhBHv2XRI/NwY3/ACcW3xxPDpSLilT4NuFywDUrODDVzj + + //s+/b8PCUW5kXvR0MXGKXh8ADNBcbhym3nhcC3XGqCo+M2n78ms0yRF9DzWDjn5 + + yt0TQsuEalHMk/sL0gz2RUarcmyt0RrfM7WQJQHdZ+Vx4EaQjp5+S80CgYEA1Nfe + + PlcxwbJ2MO6PLWaoZAO83wrQBes9CSgUk8mB8CEtCvA3sC6gEl8ihZSD7RuLjzSZ + + nVQZQdLmHbWKxSnhFRK1gfIqnFaxr0HAtrDkRt6V6OSAV6rHziNvYIgtXFKsw29u + + 04222C+XB+lDtGgIxt+LkQRq69CKSFCTQ++PZxECgYAOfqosRZEaZ+tV/86aXMW0 + + ZdQAAGJrQxcZKvH0yUJTbHoW+nymxkOULCI3PuMt8GW1AwRB2HSP9ZWqfW8r7bgg + + 51JXcq5cEfOmeOn7evtVGhCRIUzhN2iAeLa9h4nO1HvHR5wDbH1I22lrVl99El8F + + xameU2qM6jflFN+RgMyq0QKBgHymM4zU6dnjVx6PB6DyJxnzqnABWBSvUJ6FL4/h + + ikyEUWm/hw2SMMKxnnkWojCBWjky9+fQsb3/8i5h/HQ9c4kw3MXOei/3AbZ+zorv + + i7EJeEfdUmCFLuDFldu1xML11CHcp84Th4qSTGQgszr7VnCJyKXULX4PMnzpW2WE + + 7bnRAoGBAOMSiSaRliUYjKBF2ggI7tfVEjslmKfg6MPb8Yuvt5Q6yJ9U0qDqghIw + + tFgDh3H9OhFiJSx4SoP9ouKE93iQ3F1XPZa06uJ5sWVxnSL0tVDhqXHcEM0JCEB8 + + 2KGer2nGo5KcgBbwxILp7v/rZdjXJIvCz/ktqUneyW5HQtPEffnI + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 1 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:r3orpfw7tqaxbgxc62hpmhihye:meyeb5lt7i4iyewahb6lxzohn6jxrqgi6b73zv4gxzirykpnyd7a:2:3:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:zyx4vx7xud3ibmvazav7xf5omi:biaeawjobvdp7v26ed4re6bfc2mwis22aoolyz6n7ciptaqktpua + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAuIn3ExvxrpPLR3mwsmSlgk6/qESjM+a4KTrWAwDF6W9CFl0e + + +jdauS+LT4yWOwXQ9jemGfwUN6/zNqZKwHl2IfK1nxdLmi2yDs3OTWPSNQ/BV1gU + + FTpRio2ZCJJ1prONHEvuABzY1un7CCmN8jKd+VhCPXMZ4AS/RI3nmREP/Hhj2nkf + + 7PMDP1RCvk4zl7YY+IqKCk7IixK/4DH9FaV4DRiQbk0W2DeYRtaGjf62AFaKSVY4 + + 0PnVtt450CWGIl152YyJWdP83efIxT6MbEF9rayPZqxfGgXswFSAAKxtTY/EFllg + + OJomAqQYTZLo8Qh3HsM6YsTbrbdU9bbZoNnnkwIDAQABAoIBABkeK54okziC72FW + + 2UvUJ98DtFHv/b17wvIBtc2KK7tpTw0s4aGHKqHC10By+fkmAoTw8CU19X6FmXeF + + IkRD2WYnhhHAdvmRDLJieu53uXigILMweZNQxnaIbXMIPwamBn1P1yD2zDZRz2m+ + + AORy1U5yH+9YnQYBP2jSXoVWwt6ckolyduyhqJbyFtvzduK+RCXLtYUYSz/g2qTz + + TZLMeL7GC9ahigclXmEOhxrrC6b7+rNNMidCWR+S9JwSXZUUOld4+4jMDjC7f2+Z + + 2dQO3LcwTi6DJzuEIE+NAw0P9D/43VVjw0LXsQ+1b/Z0Y60SbTs6qa23KtvrnMyk + + 7tZDxbECgYEA3gRy7JugmPf8Ir/7ourB39ks9gY8Lrgx1OFd1jKDPicmm1V0y34I + + YcXqIVgwkui/C/PXigYselySyIun/hRI0l970W5Koo0Gizy1J6vgAJKsRpip8Amc + + iXKdjOZlJqBo89Mey3QIjUuq95bdwKM/w61TLb0us/tCNN9F1QRk42kCgYEA1Mj0 + + 8SfE2UlERW8qS9nG00UUVxXI82CPXGrcYgW2zT0eM9TlK62eYDC2vmH3xZKQ1b3R + + GfBzIxFSX2WtE10hnST3CuwhwGvxH/sLgnxYeWvJZvtLsHLgG+HgKZlTkbcnj3ub + + 6F5HdijrpiBf+gJwHoIE1aPeelYtqiOcuLeWn5sCgYEAhsEoiBhFt9L8xJLGRzI6 + + DoYg1gseyDSgeld3vyTVqAnXUvzhcQnESKP54ddHVEPUgYq1Tl9E69f4d6TciEkD + + kjzGSG2q+1KhoC1uvu+BfJeJ3SeYLcuHqZ1Zp0XIK1O9oBCKZm69KhW9ZZ26Zswv + + TbOMAv0Ktc9Rdgn2tr5+BdECgYEAij7BvQg8gXtzirUNwtgLsGmaLHYv58edfMrE + + wj66JKAHxl8UQYt8cTxVDl4yD0AJL4UynGq3M1pmrSovB3yjgShqBMOjrhOzRjbh + + pHZLOSAJawnrhAkuh476B6zhObPIVRVXFuJiBWfSqk0wbgs1cuzAXVkpC0yAQKEA + + ipZkmu8CgYABb10dBN247Pr/knhFFQkXm8Zt/iYIo1aZfNEziZpi0CEewYY39ZBM + + 6OHKFNjCCsXSmxWDhWvLC8CHIk9ExdI+M5F2kdM9E3TSvqtjVL2e6qqTSTWW4M2H + + AsqoAnHhTsnxjfu2TMFPmdeCfbbbZHoeF3AgUTyWT6TaV5g6n5bw1A== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:xyhviiiiqqoljw7poxi4uqun3m:rdzfyy4nplb47auypcxjdvxklg4wyseiitzsclj5aeogss674aeq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEA0aImdZWIU3aUzKiTP/h9QMteuUvRtjuHxs5ysQQQfHQaoyHk + + rR5glq7Wb/9FrTOI99ENDR1SxrI6Eqsd7FvWeASY6fTULi7gSIH2bAs0Fwc5cZnE + + Vga2hMnTUchzGQCewrskGFG+JkBdLP1YiixBj/QI4GXOgVOkZQhtdjQ63vVWy/Hu + + kmZHy0PbHrl9n6e0Q/FCdqho1D7BJ3+3CbuSnUcHDuM/+kk/cYuSXHL0BZLV3vSc + + orEgF29LDRu7dZRMHT7ziP/e+LjK5LpL3XaaNkNfs5h8aXDHRIEjuOlKaVSHvArG + + RiHZ/4CiHObaQSHUJ0BgEFXwCPsKw5BU3woMOQIDAQABAoIBAARXlyyfYsPACCAN + + Np4KyiGaXa5V7knXt4wBZjYLYd5e82WEzNfsXL1Pm/ROUEd18roXkvRv8qMCzuSF + + CyB9VX3i3O+mF2R3Y2C8NtoqAgWC3cTuTpOYXbkvPK/k8ydeuvI6sfFXkaoxx34T + + GTZsIhWhYno9a2Fn5AixmD6eIWTRVVPyPotXdO5krHnFkgq6ZWvjzZEIg0JuV1yf + + 23S6yhqlohLRPGyU0uw8fW+O5gQCBp16KbsCwYI3sKxadfPZfl8Pw7I9DDsWSg20 + + sORw+9RWs8l6egCXa++3qYn832UMeUPWOarEUVO6u9RwYnVpVP5CCPgCEprV6eRU + + mDKGnRUCgYEA1X/3H0bnVQK2zayV0DjvZGkMDLgAMMxf+0low85T+DWx8zo11n13 + + S7n2CUOIqCh/C4EFw1m72ZygxRO2haK7q4JvO/a19KQhyhpzXrdS5cbcvyfIJwtc + + rTjX7UbX7r7SWCH0jI/1/ckWDHWs3fc6MJiw0YBMXW01LOSfH/XCj+UCgYEA+10l + + +2GvmryjypY1Svn7AaXkT9j95ZkRSO5AQZa6bczjAsiYv3BGODmsIiWGK2cOggHM + + XHtULBaD0nFaQalmHo3OB1/GafpDkbrQZbraLxIEy6VVS5sXA6qq2Isf3VrFo/gJ + + K53F9ti+7yLUi68NcTAAKFCXZjwaoo/OjH3s/cUCgYEAgSeeeX9NJnIz4AxNvN8U + + guvBbFhLVTntvnhUNk+1IGxrMDbApvbTmi3vFv+Rxhhpcq4krF62cxh7cX1RZ1pg + + qYqIe//tZwd7oWWK8Xt5XKOGmuUYAfavo+LFTTcUHcu2N7ai1/2m1FY3TmZJoyWS + + QB++p54zlDkid/v9/zmO77kCgYEAkmoZm6m0/e7vgSupczjVKoqUyKXejoRwewi8 + + SPghM5/qg06RGsGtRUbiqyksU8+9taCShzQXPW8H7ea06hZgM1/qKIVzL3vlK9ej + + V/5U5KIcRPrTCi0WZL5esa+oKembwfzSaqOGElkCLo0dPRgEPm/1R4ZaCeTsptAZ + + QeB/0PkCgYEAu/Z0j5XOD2jpzUIIiXOkV6mj2XoGEZu7KPSYWVpZooJ8rkc+Eur0 + + 3y1KkBtCbfk4AtTtPNcBMIr+SCZhrI++3hbpvA6uBAyWdMHTeNwCDsBzP8i77opG + + OlssRXcBgtxaG0lbrYO5KpyxCSv57wwBmTX/VnRbxSEVnXXU+vpXkHM= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:jdm6ytmx2i3ya2bllsdzxurjtu:iqr6tyysaseegzfurhuywy3mbbwkbbsov5bt3fo6oazpyv7olvda:2:3:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:5bjpib44tzcjlbiysarvufdaim:iitswphabeqczmg6ntnjeuxc5rfca33lorjsauils4bl6c7p5tva + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA30QPR+SkpkThBIubgnvyvrEpBWFE14xSJKwE5x9RZqvrRdb6 + + Kf4YygB4Hp/Mhdw9E94EP8zfxLkYE9njeAzxPsnhckRZz1xmxY+jQTZ9kVs78OJR + + fqsa/HYKP/5yfOKxMFpUVJ0fJKzj6JVRQAnvJVun3YXA0I8eRkmDz/+aByvWQ99X + + xRzsvr5xsFmtAa/Du6AZBLhlP5k06CnqFsHQb9a7HZnyC1OyfMCyCQSQf/N0VH1X + + iQ3KLyWufJhq2UGl403XaxNi3Or59brp+R6wIQzIUn9rzXe/ftjkrqp+TTT9FyMB + + nUbO4HSU4of0uzXeYINZDkiN9Q17mpx5FSvzHwIDAQABAoIBAF5vIyd9hkbti1+o + + zTX7x0jxFjC4W63wJC5utAQuMvgCb5kyvM1WNJX8bNJHNPLJnOvyVEnIFj3XLF/5 + + IUV98+xi54C1eGdE5hNaFetXaPU6abgRgfbZ2KhAJUW8EiDQobGaA2Fms+2HUz7l + + KWC00voyMmZ4VH3iiyOfpKktq7CsB8gPIV8a+BJqCrRjRnI4n/+/8qfd+Wa655QC + + H9TjuGGeTKn9GwofeXHbwION+ygPOXQpez2YudigZBHK0wNQeJYkvDNAS6NdfUdY + + OtDOiQwhLQYOa3XeLGkcxLh9Al0c0cDEWLToNqPfVKTfsqKIiNail7ij+7EJ9rOB + + q0suCgECgYEA61GSBETDtsJLxoxMgGgdxyW2Wc/GdFBi/f3cHy+BSRHROshP+H+n + + LdT9H4U86PK1QmQZts9djBKh63AYhKgyRyMqSvFxpqywbznnkt3qygPr83VIXXmY + + 2Yj8SKwjgslq2xNl6kTPKdBv/r+Es1nhYvSZf5UTbgdQ5nlB2CvCp38CgYEA8uNQ + + an6u2OtcmsDrwOdNZ2o/3uddDtAkRuI8LFzD13rGDYS0ZE/OeIbDxaW0mty3t2l0 + + QbjW0GJ1wUFoutcdJmRBOj604Xb/NYDkF2kiqtYIlnDyVP4nIi44+0TIfTs+zXE/ + + s0xXnwpZB0jfuQxDT3g4U7fARx0K5kaWQxxzhGECgYEAr4q9K3QEr/xHPMkCdLO2 + + qw4F9v+ZYsFo52KN57Gvd0vUUk6F4bGQjA8b+HyTUI9mCi3URNxyQ4DOy2xmzecP + + AqRH83ojtxuRzpdameP0N1kvlgFCx4BjNrwKv0eygekxTlYtK9LC28WDFn3WR1jg + + WspvC46w3N6WSifgp5sVbY8CgYA9Zjcy5JlgnobHXBN8rTwE83f36ja9AuLYxGH/ + + uOeM9i1Qx4YugXopP7AHq67vIvKSO+c2ofozrWAlHVrTOIPW66sNhUKGaGV1agK+ + + 5EXuN7LuDNlFoQXVfyfKZQXlmm9y0bkPozHXM290Bvj/N1lgonxitWW21GGn+poL + + lwqgoQKBgQCiXSbwbmUtTSmgDUNdHJ7tkwk0+jP56Yv9feH9FUWVJE8UF5InBB62 + + 8KckguXC3OcVmXgoPhMFgMwHJE0Mqx6FdhQPCM8oEMYYg+sM9kTHiykFfTmdt2hJ + + L5A9omWNxiWRKgIerKOvO3ljmYsSXWp8VQJjvCm6DlznDg5SDSQrUg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:pxo4i23yfsjuv4ntm3xb2rwp3u:3vqfgh6u6k3qh457kru5nxe4enc2zkmnb6jmkm6xj4x5qshby6ya + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAxr4IL8ukM5awbx8SFDOqHXyWEEm72ceADkaBYiwJIemJESPx + + 9kd3Vvc3Lu5clWbBeyMvys6LAjcMz7xWlvDZ4/rUDMRVzY406P8c0dSYGdnoJBLD + + jr6CDz0JfiInMKGsBaVUejnKoW4l2PMCj1tbl4v2egLKSW+XzNCfFU7kFJHfOK6R + + MrRq/HVMt8eIaHQt92Gziukx/AgoktQhGxmxUJwd3ETBuVYFAqmPBT8uuf7bcAfV + + JCfjrxxH4wAwpWXuUSu62Q1yOw7FqVQ+k86IUNFVoJQMlJHQscXTu9EBAboAqgM7 + + A4rcgVMqo4QkqvhX0/trklqyU2kwslODo+pv+wIDAQABAoIBABJCYlPV1K5isVoR + + k40kmVlf2WpXWTlvJq4+abkLIlmpxaHmrgkk/sC63NM51hVp3UEtdet0TM7gH5QJ + + vIuInFQ29tAnd69M2e1FhwXQ5O/hwSi99UFCR9u+OAbifLxElkk8gTBA6q4ohbSo + + JaY7IVqhOCd0kIDtDkLPMKvPVY19bG1FKiDx0BSBm+O393i+ht4vIahZEPhxPyWS + + hF01XWqUyeG2EnMzmAOmdaTUck9hbu32It9IWD+Lxv7mN4L5CIeRKVRTEF4/nV0+ + + SpMCg5U4ZcVkR7Lm1k3Fl5qUZe+W5j0sb6z1r+M1jKgFwTmDMKrmU804qABDw9LK + + PlfXe+ECgYEAyqny0/ff2y0sq6TDGq1+tE1hgu47fI/arQhkNR6GmFJH+KZfQPSU + + Uc1TF9XQnEweLr1/U4HZE7bGGVUfbhAALmvZVKT5E8gfYOoPkm1fDQoavFJW4+26 + + ZSPu4gl0d5Z/AmBPk4BJRdHsRDDDKvB0BdKiqKpSkMTgnNklznVPeVsCgYEA+wvg + + l10zUPML3sX4EcduNfRR5kXCAtLlU/cnB5lEZNpEDesiBMVvXxmYw9D9z9LUiX2w + + dTcruHv3mgsESyytThh7idyBv8Nw8bP7BSOP1TI090MjztPYByOjK9LqPLSD0xhN + + 2sVgH0DN+THvD2aV4uCEWLgKEC9bD0dttC+2BeECgYBDsEmTdInHCaqO1aP4iBP2 + + opW8BlfF/cIa4t+dQknQHEM/kEnmRwo23C4xms9nNKEsGUyqlobrZ7N4iI7L0vpM + + hub6t3MdoUyhsOtsi60gjMxrM9EjpaYI29yQkHne61wWbhaF/GX8tOWFzQeSkucd + + fsGnNeQHyEoA+SIAd/wIWwKBgFdVf3FI1ARSOQvr1OvidB3C/Abet6qh0XPPZD2J + + fTiUkd5BsVj1klQEJJfiiZmV36hhGFT+t2/7eFyXfovkY/nqHHgORPkANbdwBGB6 + + SZxCVhi6u6dFHT8Gj8o8Go65wa5bIyJ7TYAx3DXXwDGcX4JI1uHCTIXq44PCNpDb + + lDghAoGAYdL8Fl337G/8wO6e1cIbxLWYWdtQvr8ibsQJCYznbQkligQ7+Cb4Ch1F + + ceMke2mC511kxIdPbpECf8eP6JSqtAd/zrBASe60N+QSvaMcQwRqtoVnduERfjDH + + thD/UyoA81pRl/hGX2ddp7tT/Fu9A8/6FLJzd7g/k5ZgjkdjfpA= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:7wz5dhkyob3gmkydzgbptk5qku:cl6ovq5a3km7rpfhyb3putg656sp57lhnp7aexbocsbbahdxnfia:2:3:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:dq7opblcokohsb2hhcuej3keke:25zjdhlue2o56qcu3teoqltk2blks2qm2n66rmd2qcwfujbvo4ca + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAqF3wcmVUimtXuQl8xGtHK4q0zCOrUBkBVIMakmXC+jlLBnKA + + pyNjX8S5JP+nrQy2ZfsNONSGgNS3HoReEe/U/y+hb3hXHTyXpYrrSEgbKRgTxREQ + + uoPW8ljJWyPhe+h78v8EooMuz+5E8pGuROQba9It3b84rg7TKRSAEHS+qN5v1JTa + + B5SkfPvrFj2BrKefGupn+ac+lX63B4a6KxQtVrnhHZ+HZJ91AU8sNXnIRLVc2jdT + + VLfUKHjwpxEXWnpZdv4ypUfrjj6oUfn6K3y/vPM/BR68NadLUx6+EYX9Y4ZBaCLA + + c2pNzT1gmVS5KYvNipt8SEZu1wjj88/8UxSoMQIDAQABAoIBAAD+kwu97PlR/Sc8 + + Ntwwd6+6ZpXOanXd5pvcQrUq0Yi++2I1nWxp9q2LYNORiKjqlQ42T3juimqANyJV + + 7Pn6pRL/x0U8XE6xe6zQN1Jf41HYu6R+P2TL9WJM43LncUQVLAbpT4VH3z1+U7Js + + vq8sphEli+dOIz8l78SDmOZf+3tNrejZqHPfN57WzZ2iI6XdylU047fk9l6XQvcQ + + II9o6LfgB6pXeAT4yhMQwK8LGuUTkwQBH8D29cAe1Vqt2uztJ4NfiEd+n6EsH15m + + MyAuZDVWp++T4m6w6TJbcFBL2LioMkRb6zsdb6XK2QsTDDyEqSGfBxNPIpsRJTqP + + mEjrOuUCgYEAxvyWv3vRyptCOZuh9e/6Pt4eYoAk4gLVFuxKNR+WXjSarPYAVtt/ + + 0u5FbccjQQcZRTej8rTVKHbRA1jT56mPzutKFlftpFuoUGoeDQ0Y7g2nVVXnHHIR + + KeBgifVwUIJQRWfsiVt2Gq5ja++ccGoJHPcnCHokqZ5UIAuuGNEIR70CgYEA2Jtv + + DOnIJZ/4jU/IDnYeR+9Fbg6GioB/s9e3j4wJDNZXuQ/ju1l3kBfkYLVaXzgCNgFj + + UECedrt3OUxWP6cp2dXM67rQ9uw04Fnl1IG/Uxp4icxvjqEGI7IkxCFFAXnRdA4y + + oONgNn8jCLhuD9PqUEXAKGiHkLr+FygDye0tn4UCgYATVn7L8xuLRhVkhdRykzTN + + oUZwqiVrdX0B8kqv6PbzBse1YV7dEg3VEOTca0royejRyjt7nclNWmarnZlSXS8l + + m8Yib78fhuzPi9CJ0ikHEXqel2+TWx6B5FVdcuXMXS2x4QyiuKm8pA/zcGDSp+tk + + zjwT3dLsTP+98YSk0sOsPQKBgQCRpKGcyyy6r7+ONNDNeHqP38CNadLpGdHD+Q4B + + xSTors65Lofvlw6fopD6vbYQRDaoXXKLqYdjSlW1/zAXCK1JPUrWTfznqpc7Kvcw + + VjVxCWF3NjDkdD0Oj1/NSJl/jotZP5qnN3uf6QiDeo72sYThiKTWBsLwe+sRYuR5 + + R7LfiQKBgEG5Zdbp6tVMxI6CPdDpVnMujkoGHHdNwVEX57I2a4Est9dXp37EzSi5 + + /HUwzsS7WR1VmSxpffg/05yFBW1wpPW6Eydd0tip6V6u3XL8CJDgxLUIg5GMWFOk + + tvWYmVQgapm+yt4MNe1VVui8FL5V3jxJrlBJoVherf4GYF3N57Qo + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:tvewutqp6vuesamnwdvshuhqiy:43e5ze3qcoatis7rfqugjf2s5oty73qr7bcfgschuesycfsi472a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAv7qz/SkzzSobYo18DO2SgJN2j3JO2XWCWFHBK9bO6R/SzFmP + + OY+Gx7WFU/jJD0Xzs+bS92HcUgcnF+vC6gAAqcRaqiyDIuAWumrQquDcUyShKwcJ + + QmWBX0Y566teaguVf3RKlLA/s/Oe0b0CVV0mFmr7W4aPjszTXTH54whHAuO9hdha + + vRZzqXWKsgH6KGp4RFMh84zwF2Cq34YSKSg2+cOl8at4L7lW3nbQJF6GKZke4hd/ + + FtSAM1U/ynJQcIFfVODmTVLnj5xXpLtT4j0Em+EpDVVuk8vQKOX4k0L4Wkc8JZ5I + + sICrCqCEDdmXxOGRsFKWEnePXfl0QdgMDhoCbQIDAQABAoIBABEcX6mAJAQzNfwe + + 0LYzUkf7oRuejHnsz6QD29UGl92x/jVIPYzaCcxzSexbaiTc+H8S4mYQi5dIgHfV + + OHEmFz5kweCpFfpRUcXzosl1RZnSouLnqa8NcbUn283JXqThLBzoAICc6s/WYKiq + + 5nU+2cIrbGECineollPIEjCYUa9orc9Lzi2k+SSvfXUd8bWJunCmNn9fOenSYmzu + + dzabXlDvQnaA7C3ym/2NsRl5w6q0px4lPqnL8MJowNsBYRkd7pgCRSQqd3eBCeHD + + qbOT1SXyjCklnse5bjEP+rMUcMRDktFCBw2WTa5GZcYgzoWtDL8WCZ39jJQTImti + + qiU3tPMCgYEA7NY+pUBRrtkdebwHiv3zvD7pKzGvUxxyY7Uc0rtm8zIvty2XNU/A + + +3Yle+7ffv63Z0ub/0yTTFw4kSl/jE8iQwqySSmDKZ3EhC7dWbbzOjHIvtVvcCaR + + 8EbX/jpMpASX10iYonJXAwtrtn5vm5frKKjm3sxGNORBK1M+OllbOosCgYEAzz4d + + quPcYInY99yYp1g992vuBj2bSkD/9u/lbCwn1Z7gVFJDBVVec7FAXm+3Kc/zi9s+ + + Leco7DBkz1IHcVGchF5lGaUQrOXV3mHZEbp4mXfNHLkwMYjFCwZ/70ktXm++AmlU + + 6rFzSVtQyLj6EUBZZ84G0Yq6eQGqZydo7WjxbecCgYB7hASp5FB1UtAXg+OfLnBm + + FZ0/JKteOfDCZVtB3/CCFwNhkgpRCGYJ/wTvjJXMwoTd/0W9MK+FXHc35Z+aik7B + + DhwLIfZAxwINOe/A8TQKfppGREPZBpSH7jqJYNhFlgumgDryRZVxhgxH4crNJ77B + + tsypF3np7by7Hq/OeHmmnwKBgQCAy1CyuINn96NAfvbb4Uo5bvjxJe5RWk35ECPb + + cyGab+9oV+tQ8DoP2lNvnSwOry7jdvCQpH1ZM8Yi1g7MDPUhimx4YI4ZdYjReKvn + + iaSTc9GkDS73SdFzRanScv7gFr/WTdG5PWixaS+uXs8CU6R8j5zLMtUqiK93BhX+ + + nV6VdwKBgQDBeauKIaw6AaWFY5ALiKmWylQp50hF5S/dFocCzVm+isnmIhogjwu4 + + cYG7zKtAOU+6a5UhZLw4j2Nx/YFjExHpY31qEap7CAZ1u8VD/MqVzohweh908Yd3 + + X2X+o+t2k+sxaRCNJZwYgpxpThULs17PoFfgKS7hYUrbwk1ev4SLiQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:aagw6esdm2msphvgnr3rlzg43e:zqxtrlee6hh3vtfg6ihtssjqvr27tpvi6gkmngnhiguttjz7yyja:2:3:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:4r4hejfttcshuxaatgims3x5ge:25nruf367dyhnsykeid2owcdrbtbg24yuvynqqswvbs675ieaa7a + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEArW/N7PGvnQp/v+hiC9FjnwBTA2sTB7SRXQsta3Up3vBHyQFk + + RCcpGL4/oQA0tXH0QkG/nIyjT7VwUHWUuTs7HuKIVhfg42p5aWrwW2lWbZpCed3Y + + +AJCp3/pqSd+7SDV+2Tc15lKLsx4bmN7+hnVpMkTDj5bnpTFPkjL60SL/jEduOvT + + i/K7hJoIiqkccaA/+ldlRwVq9GTom7RG+AP6l8/tbOUyV6heYCFOTe5jPEPhcF9p + + Knsvwu03rF2HRjKqb4TcdqGjZqJbcMnPIlJRbUDwHOwKRpx+2SqeQFe/jrF61uZi + + J6EJdliKPIrGU2GEEz+PCwQwvUXrZ78+lfKU1QIDAQABAoIBAC//ZhTx2fDzC+G3 + + VRMCMri5JUAn7M9QGH6QblRzy0+oXaVyHiaCU+xGEmPjI7MnQzrm6TlQ7o1LoDaU + + I8GTc8wbUzHIT/N/7vPOpZAWudWBQG5rh/Uy4vFqA+dNR+ImGTIGeturz4zeB2I9 + + Y/0WEzsUbpKdjUt4zpFrIgwNH1UMGsyjkdgHOBFW4j+aia6cV5z1Yr/3vuZ61Jad + + Jf6Mz5+zyLNqKB9iIM4HBwJnohvrW3n62o8Fxu10ZiManu6DG7X4xCUrMk34mq7S + + F/M5CR5a5ZN6ZFO+uGlI5Vn9kKXylYDyJqezAfS6eho/Nm2J6KNm2lvr1URI8nFQ + + T/Jn+e0CgYEA9GcoSa/Nt2Ulzzalmyi8Q7TfcJCMmPVCsMYe8J55ncYmBwyyUy7u + + TKd/osu+nWsuTxtSQ1bbWMrKoMghMi+mfc2cDGIjvfanmr4jYxpiiUy8UZdOGkRo + + QBovn5jWNk5yhC6PksUp2GR9ykezD1KWSEK6RrlzrqfYTF6F3nv/qNcCgYEAtaqY + + 3NizH1tF7uh54bqgke0fxVMN8egv0uSlxb968l9B7LXkQkP6nQ9s/jcSnlDUpu9g + + ulu+IXpeIaIDMff10gdKDEfSjNKHwBIgLe+BD3xkGYbuGSMeffO1f6apCNAvceoi + + DfxgyEHL3HGnweOdJXdoMf4AkBV7TWRzlMSDXjMCgYBeCzvDbvSXt0IfRAXheIFJ + + BFZeOCEB0o5A+1t4d2KQxWhomggcXhiwQluoxwGoDVAafIbhBpEMz6u8xoWPjCpi + + ijWbxj++nyTLNJLlVYfJEU/9jV0uWlhLIkhk/yieaP1Dw67XaSq666BDr+dE5CCT + + 2alYAZB0Cn3+lPiqLciorQKBgFcOb761ofEO3k6E3ZOMydHkXmtDR9V7PR/FLqO7 + + BQINIBx9detDhF+rusGARs3TUnTFFgd4W37TkzRu3TUe7JA/qf6ElKOjaCZlCUK6 + + GZEAPT/2Zzdomv4kwf9wMGTmzzW5y6QEI6UT0svLM2c42l/P/wCmBkMF6FbIIpNS + + MNn9AoGAN5Q51YWtiagbvyAzvanQbUPumSaU4e2Pj02sUj18XiHR0H05lzcQPa00 + + R3NRqz0/V77zVH78+hiUwaMq+cS98a9en2IYNbIQRzxGKQx+1f9+0XlpmJUe93k4 + + wC7hG8l53bXeMj5NXC2W2RtzDRcfnEiwcIYUkfmF0DWMKlVdLAU= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:s4hyspsx3kyont4eaad5jecjzy:43ak77lwoa3ent4nmpsb222hgb5zcwpcmhq6ct376qn2747u6mla + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAoV5+u55DxsXqpuB98wwyL/XrkYXYsqX0kXcJ+uF5XMFkSd9+ + + YneCtRJJHeQvilh69d1RZcisuVpXxKFa+IiTZChXWih8CTtRQQArp3XlSllYlM6N + + bSQ6h3GOU+M+VCo78AJJBLQ5MIJRJFzJVOSbtA/b1qV/tZ7NrXkA0c7wQz/bwwO+ + + hlXdAuwPlcR8vyDkO0ZapQBlq2Mp872l6S97vjNX4mmWmJoMRuHwSciyntjdn0Xv + + QIMy/tmwrM1K2yxjjLoXU6anMTNrxdGG8t2N8j5hKprX0UWsiEAVQ4otCzJvmYwi + + hxCccJiLchsnSVRhO56KTUO6H9PmqilpKIdPgwIDAQABAoIBAEY61Ig+JHw9hdbz + + 7Azb2XnTGx9986YooOywNKk5+TI7vrSB7sTXA41ftG+scF5TDMy1cigMstOGdJ1Q + + pkF1W0RjZEUKSpVP+hiChP1AS7bUdL9qt9Vwx4JMEygCRg2mRei6beH8t8kbZkof + + kcX/Kp6uqjxcUd0PDK+7cnZdjGaPkuAaiMFe+xpw1OQBVz+g7AMMMfWzSpPdU5+z + + 2mNnoPzcePbFojXbv4YQb7IExJxp44cS407IMrM008s2SN5XpNEsM62JdCbvCQuC + + LQJXvlccg6GzOv68QFtiShAWhskhsAcDGFDZLJyLPCTTUsav5MJsheoD8gCo1ogi + + 1yNVFqECgYEAy+ZMATNtYyRuP7w8sW8FbK0uHRwtA1XaSfde5Edv9dy8bVn9iDik + + G8pnbYWoUOz9ol5PWG5A44WiuAoO1/wLBsbNXyBM015SN/zwh0YHV7G6I5cs+018 + + 2RiyPECdQjYNPvO+JaGJ8KLLwh71rn5Jijs1azQNHWOoHqz7hSjC2iECgYEAypol + + 8eS5bo+Tet9UuNirpozlBbjZxad3mhlNbbkn3yCdlo16lTv+BdTT9iUYwqdvm7r4 + + f1qLpNSDD1fSQtkFwLKVJMl2eHt/kFxZ6i3Qp47y+x/0CXRrwUcBrOKXRDisY5uo + + KahCoRJnkcoFXbSTUd8feJZKdgu3d7j0Qd713SMCgYEAvihJOdV8brnLGCW1dMTV + + ikT4fK2KTVIEAndxR/RXtjPmhxUmHaS1aDWbv8im8NIUuRi7Zv1sBsTavEilD0k/ + + /1Hoto6pF3cftpduurnUnzRhJFAY40Wg6dbeYtLf1qASOmOXMgE1Y/ZvkNrOxa2B + + aClP6Gri0EXgxLsO12DsWAECgYAhBcMNjFRVGv3U1zX98wL3YJurtRd5yfQKn/ko + + 2zcOfUhyU5kZXe/nj2sFAcLpZ1Ufsvfx+hYsxZ6fD5dr4ee4IuOAXX374VVHeGYH + + b3RE+13LZMfoCpvNov846K3zJrGigqqEL7K8gj1zW9RIE7i3bYC5rPVyDDLZRsI5 + + QlgctQKBgCPvT5jiJXsM62rhhO/7HxrtDO0o/CijpZiXQkPaRuchNdNh+KaleHg/ + + HxYQwPLnDaqxKt+FBwgq0Mu3cRFuAN1snsjx6dvpFtIQtZi/IbwSUf2zEGfVwsCn + + jafG20PQo9VmtwInm90Kqbz+qTXTTCTzwAFGHiq6tPoSggTp8AYv + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:e6uhixvbm3g5amrzdzd3mnmsqm:4n5aafrb64sqpfnhcdpdfrk5gh2qznprjky6q6jybuuqy2q6z6mq:2:3:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:32tsxhwsbircqp6wt3z37xh4ga:f3iewkiw2njala45sk5dmmjsl7po57q44kutdflgfudorwxox5yq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEArrji79TMBXxEgTKfQOBjShN0/1TrT9AGpPdxIt7VEUP/pTdP + + r25PjSpO90YXJsQYExyf5Z/rp88gHzC8hfJ7JBFsRi6FNG02303zhAzRydNn6AW0 + + X1+bfjH3ELdf+skvC8mcT6jZP4mRZIQOSAC6e426FeLrjB2qbHVj37pXyKSi/OvP + + Hs9esqG74KyISQ22xD9X9aPE5eK+1S0V2Rqbh4NnQg1qoA0iUiAbRJyga8TIpRuN + + KFcprOLd3POeIExviCPjVosH7Ta1SvDH5nZ0qsV76tiZGBzads84wFzg6RMdF84d + + EmNhb+5crWs0ImtXzdSWDF6+ql56c4wYPUANNwIDAQABAoIBAEwKNum9qNUyUfYQ + + e/KWNWAFu8Nrx8VCecHN1rUgWYZcG6RhwBJPZdu/8AH5xRWf/gJDUOt0f/DWWdp5 + + MXLyJtl5o6+fi2VXqqvglvx/P8YgdXYrFWb0iw2O3UGvLNxONmVg5uBcUcAvNNGU + + D0sS1hXzhmsECRM/ze3J4R97T70IAXVoW/1IBFKVRVS5YHEYDy8IHRm2TnhXGMu4 + + tp51j//PQwR6TB6vh5eBGqBQKSY+Iygb3r2Doy6ef/nFy+NmL1vX94IbfueGNb9/ + + mNB9obqiqikzHV9573x4oahvinJQixuWkmPzoVDKtUsHlO1xXyulZjVmPuJyl5lZ + + NCUGFiECgYEAyHt5brRA/EWoFSZ5/YdGZa4B/p94qj87iWCilUkxrIDTYtM2iMiv + + oGDp6waCiF+QqiDAFY6Ggq1n4wyMiYKwfD9ggGhHLcdtnaRaeiYoOBNPNAMvLixd + + saw0g+GOn9P0QpHWanqIFF3UBhGTNLoWBKI02FAhPvbruMTpM8Cvng8CgYEA3xs8 + + MBPH3ggBENqg7jgye2fZ+IKaQWIxFKa8kIvHjv5dasY2nBxM6xcZoIyz2XwQIfq3 + + o2OU3nt9N+GQ36Y5m46igYTGkAlXTqMuq2ITlq+DTmLwLPLTXRRGPuLsdTtLJOAa + + Sh0Ec5JqtFVlXNVmtsWMlrPaXty9ik2/S69mRlkCgYEAsT7g9CvvDFo1KUXUMn5n + + kbvOzaOF1daDt4g1FZEZlq5qtQORQktTYpJsHLqrqw/6YT8FM8nHSD8xCr5sfaKK + + j76kfcIzs9iOJAJLb5TOmA0SSCTMkKDu0QczgqlnJA0K9dPj4k2kg4UUz6y4HbSr + + hLs3x0rIqdc6PifxGS0w1qcCgYBdWwkZWP2WA6VmhwU2CR/ekXscyJGBcHP3Hzni + + BgtP41H1ntE1C4aIDJd1ncqX45jgjweOf9nIKsYfvuwfGXAbjlijd4qatL3qss+R + + eS2XLQP1peK3/DfDR/uIzu2AtHniCUAW6QN21Lp/kQgkC0u6iPkmCkYC0b0iBRxZ + + sCBMqQKBgFysV4/bJM86H6lq6Z72bJPoFCrkvdEDvWPyGcRAsdzp23AsxzZyXwe6 + + jOclUXpeQZ92YTk6G0+lijFZTclVLVyF3OuT7lJn7iAt1nWP4CW1UIDn3AsYiB8v + + TnXZ588sEdQUC1ntog+ikIZNF5am2fpC7uBLUtvHCzgbf6Zg9sWB + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:chrm7iotsma3yt3dw3sc6tr4cy:dmhl2yrc3bg4vjdyuc2xvcdqflt6zz36mpchvc4bulhu4c7dru2q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAz8YPORhy3pEpkHDKkUXz3UJXmGEQ+88Xd18ingrmzACZ52f5 + + 6R6ZCw2F7cAVgrWbvPZ81jClKgmatIaFqvN490NUVGm/BgyLd4kDVUxqVu8Qb8MK + + dQJS06N/xV8ZrJQLFp3mgccH+dY0OIZPYMwRhchACbPWlgDngIwXkySe+O89b1Rq + + JfCjj+t4VMYYLDg4es55CFum8VUQmK9Gno2hZYGoJUumIlS6bhQ0OUq44Rp0lKqy + + 4pB0e1EV0MnowzXb604xFUTaWN7kI/2Y5DvjgiwKMNWsdy/yECz5gvuesr9zw1OP + + VuXnAPt9W9p5L2Uq0xHjMd7vE0ns6CRlUUHeSQIDAQABAoIBADGDa7fJv4ASHFNX + + SbK2dp+s8mZ2BT/Y0WkJUxzSEL+fSg3nDZt0BvknExo+CvI/+JnerI+3fnim2sb4 + + As0jIdnc4fEO1S6qGSdWj6SJZhMK/AICOxD4yYe1YBrHJ71kd0L/xIF7ToeHeCDb + + QvnYj7lvp/EX+gR7uS99UxXl5XuBS1eZkw1wc6DW+Auz3G211ge5iewdG7IceQqK + + clhpeLMbi6JOieeAIwQFzjLuWr05h8oRSU7f1pjBsy1oXSc1jqbFSPqD7LMv7gQK + + qtdz8yLr6zewUlVdljoY/Iuq8J+pOXnOLwtN4/aeRxHGNVd5/fKKZy4GhtM9eCIh + + +wVkE60CgYEA/dOEl8KGyD3jpEvIUziMpe2MKO2rWtGKmzM3atXAMyoQamL2hA/P + + xEkNC419qtA0Su5OP260vJlORG3DULchOv3PxirUOnRAgQ/WjLVNqmjypqDch1qt + + 56KqA2KMdqkRAzGh2rVbcS2RAGJAsz9qK+RK2GDf/mPvoAglGBJu2RUCgYEA0Y2T + + ukrd9AjBIQk1wsuQVXi5K411RSy1cjZKDMoWjkntsuEqmw/u1JztYzwDcpxe7oUG + + Af7VBMlfqC4/ip3+xc/H7g5VxYfKeRfWb4Kof/hBcnw1WdkpB1jkOyD0crqGVNFQ + + yNRr5deCii+Ptw0CNI2gfVumKV3rI3r8ecu5lWUCgYEAzy33+ztPcmB5z9//alYt + + Dz6++aVNCXshrJ54bF5+XATIk12lo5OYXbnWyQg7e9In7MVo3wPIyGxF4zrIgriH + + ijQjhLfutKuw/udjk0RlWWQCM5n3hw+wBPLT3KFyz2QeO8ImP3NqaQ3tXifUcbqg + + OaVEpiskieseazxasrRRACUCgYAUtpfZnDjgPFVKvKxRuuljaXF0OqFS2x58UZ10 + + Mi2Ulv4l5lfdx+9lmLVmT7JPi+FeVkvHura3qGgKKbgiLYfXabhrcYNM6SU8XvzV + + POcG7zUY6eokHXEOxtyYc6N2C7XngGEp2MVpjKncmuLrxx9mrnEkswBzqlLpyOhX + + 6alIeQKBgCDaVMa2HCfRQJ5p3fBT9aBv0huV8LsyurN635B0rF6qUhLA/bhYgDfc + + ADjsEsgz38LahiGqE52YtrfuoJwX25MdFtrDjXiGVpIwcByqDu0lLK8ctox1OufO + + xRSKmBf2aI6Ruhs50y/Hq6Q8m5Nshtkq3Kmqd0oMEuRn3pynTtHO + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:abfmzuiczjwt6e67f3uoyg5i7q:rk7ie3afnp3xgvnxu5e2vioq476xqwslqxgyx3i5xxevsjhkcvba:2:3:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:fqulzqs2c3wfj72rw5qxe6a5bi:3uld5nrzgjvcmsjvesheeuowyhnmhmz2fdlqzvrkzyck3g7se4ma + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEAraetHF9xlUFy1ZkIoBHJ+5WhRkta5xo1WeN4/1UdPkqzbhUc + + n7ujkO8D6XuSuhzDLoTUjzYvO1BVkIegZilF/seP5EJSkGlbhwjsiLmWx+U5Ca2g + + 0Yt+1dhgx2uVapn5sxlarlSkexbjx26+fmiibDrasOu84R8YvMKybia+H+KX3+Yy + + z55rqjqn2B5iIHVtt/IOhHSU/8AIBwig315Dd+PfseAiocZhTEjloWpj6M9ctIHP + + Npp+WoytoS83NmqduZOh4cLRMBNxddAsXj/XFrEforfGWavcxsUpgKapDecUmZHh + + meWvE8A3w83l6PlDmFQ3kmDoD5o1PXCB6kLTqQIDAQABAoIBAAHw6+md+pHy+LRW + + UxUOtD9SHgZ79iaqKzuiKGZR/XmXnKM+NNZFL7VfZg6yLI2IFz3Ftbu/aaw2KLSO + + 6a63df2rhELgFsdxM2GL7uPdBvMDIsMu1StlqWowUn8E9mhORoIpf9MXo1HWpRiQ + + oaOd5AEHo4UqSa+j/E/V+fk3s3KwxpP9Gsgh/83xfb5U2D2WyXGFdZiEADwWu7u8 + + Pee1mTsi5W1o8lCoRI5LIVdIdLfNMUpLlXx1eAKhv9N6IcJYn84yTbGKJSm6OzO7 + + lR+KpEZcT9fovahhw4IvYyC4kN8IwsnISIeAOl1LDEPnSC8ItRP8Jse7AuYuox4C + + ki7LEnkCgYEA11TWaXl2ltiQqMP+UnhgjLixC903Yv4pVRPHMNZG6azylMNhPDZr + + HLdwvO1Lc/3WqVsFssHGYJFtcNMM2gbcNB6k9Y0KwzdDe+g780Nj5oqpmiYC39as + + 7cwXl99wQYOOzwVSjaGAZJKaKJKCGF6NhAz7QNh8oH+xaKPyJSxh6m0CgYEAznPO + + Oia3vGx5hRBa8VLZ6g6JLcL5sp8Ql+DZE2xh0UJ4arTqF8XcKoONGG0K48KPHAQW + + NF4VRAoKtEZrjP/BqOJtjXV5CPj9NBVWI9x4XLbsh8ZIyk15lZgz5TSFrO5ENIWs + + YKk8RujLB2S1OgeWbJwBmakb8AOUDmiztBVUCK0CgYEAr8g18IyTXrkT/nFhH/nc + + 94OeJE1Gda1+GFG4/gkugnwI26BTtE/ISP0HL3OXcOz7W+1OTYsaYqLVcJEZoLKQ + + +Is7pqio7IwkrvX6Wq/c0crIgWoeVpRtPwKpD/X7McAvyJhTuALrSS7UYeKYCUTG + + ydG/GkSgGHWlYgLUHbyJglECgYEAsF5IOG9pGYQF0EInnu+rkAN492oQjKLMtyLz + + 717wtac2XdpN/Z8fNgaKG+rTmb1VKpbnLTeOrUBy4o0iRiMbmx5MfsNzcdHb5Ymw + + vBQVkwcGS/t9pa3IB58t/kn/RLuL8t6bYzxQbTdkct164Kcov4IK7+2DG2jDLAgQ + + NPDfiEUCgYEAhlf3Y70hQaGmH8q4sQ1Zzv1KDk/k8vxcTEoqB4rTjFuV7ueqCtHt + + Oa5VB+JofexDmfs9TueIwTjFsFaCPw6PSqaish7ZTnzOwr8mzHsyvp56c3c5sQsk + + +ILbxcckY65gmD2ZKru3gW1oOpOpk24n6szu3UXuiWp8+AXg6sTsoz4= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:wif4gkouxqe6bdypqiqjmkzy5m:lhv5p6hp2ok6iio5rar6uu3n5u37f4k465o5hqxzgsaxly44bowa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAuwTMW8VXBzjm++6G+QDQQBS9NRUNiKNN8Ni+TFmSH+mIYt5c + + uV+zZnZyvSiHdvcQo3VrM7lko5qWORmfmt+pLhO/BbTl8G1u0+RNnEi/++1f3Lji + + UyL+U5N45+HhQpIIrIPqp9JfbJwxNMFZG20JGs+HQgCJs7APgp4EQgccGlizJw7u + + 7DfJJb1z52y5t7rESKlFPh0hhYR6/3/nHa1i/kuigSDtE6HZHd3cx+BfVBE9zUqy + + gkU0sdiDK8OzIIwlFkOf9wdkl27HwfRYSkbqx4ke0yejsdEtnmqwknd4d2uDnWBY + + TdcXn9+3kGknnt31GVz9AMvjlNHhL+SBq+wBMwIDAQABAoIBAAD3+5UsjLtTyhd5 + + Dunv/07PFe996DDfPwwR3Arrh85lr+ZwRB/dGmbs/Eq8YEiVTB0LCE89T1uug30x + + Z0Luu+4kiNznsWYjqblfRCsn/Hc047IrCW6rXMPldNzgH7f7TE2xQGJmvzr2k02P + + hzfzLnbhV5GThEU1iitLIQ77yHdb7UvvlJ2F0CNpsc6bWN3udjg6iUPeQ9HXQeCH + + YakYdqZ2iGaISE8Tk+GngrMY8UEDrJe5loUzR6k9IG1NwLbIbbf/vE01aMMIvYqZ + + VTeJXcxZNet8KEv+i8rL5hXgTKg8cJPJ6ex9HO1+aZ3J9TDS4zFl6Vr4YFAOW1q5 + + xO3D09UCgYEAzXZw93h/CZ87rBnP0Y5LZWFZ/+iXZ07+Q7N1GM8IWA960EkeEb4/ + + ImgPg+YD/YoOi4SWq8Ckv54JgpMUr5HLdo2KTmB2TVjEgPCsPOIxO0SbVhkI/kyu + + FfdkiPfDzFuBmtdNLDRSqy5wX89OAgVN4N/fkO/Nf7rHgnluQoNLynUCgYEA6QT7 + + TM1vhCM6UGUuXC7NJfSstMkaNAmE2FOdbcbWgWXmc2pAFE2Al8ypq/EJsVWKVDeX + + G70pDe3iV76mPFOUGhjIthdb3J1eJrP29QBkuCGLd4rCcbJlhr1v/f6DI303zYCZ + + cXZ1loch5psTFaA1F0TQxiAg16XZ6YXX5sWUmAcCgYBlnrUU0PYULjt3TXTp8nT7 + + +YBoAAQSRpGfrny1/n/j/hQCPIewwuW7ALjbxcInfkbfXn6fCDLzyxhtCo3qoDN/ + + uVW0miUo8ESQeXjWzBEJfU9O8Cbwj8BygN+qltCynHenu+Ehged5XwiZepDckv8H + + v/J1XwXGrPzMXX7ZStMLmQKBgQDdbMJv5PeHFQKgysUXC9Idszc6Q68Gq9T0y9/Z + + JQ1IwNAP9HMX193OYckJfm67eJGOHZUV4tZUSiy/PIcy5Cjj85Eml2PPbCq/lFuj + + zM/ouNeSrOTArckUFIeLUILFAoQ4X29wBiUO+TIZtFqaPja0+ct5uaX7xbog0fKr + + dC0TmQKBgQDI46RUW9S72Rtp9DPSyfqcAR9vpdS2uUKlLqM0h7gyAjGe+QARst3p + + eeL1WFMMZKbcEgqjJOL549WKSt6P0LsmHBgKsYX2ZeKxC9FOqdthuwWLUwMoJwA2 + + z+U+YG+nKqIWQJh3wcUEOE6f4/FbumdaTmgmb/vvnJZDJhaBSMvMlw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:34bzejdzpqinmuzdmqenkidf74:pcecbl4ulygiadgdagonbgqmpb4lomjz4v4vqyssr56reyib4q2q:2:3:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:opwonr3pv7h3vcqn2on4ucve2y:necbkc6fuo4ahphse3nyfrcsrgjywctzxnwzt67qxzwewpklmkzq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAzDTLbYcIX95OIeuVqrdLTNNVsE4d6/aQkVUAHpl6b7w34/5/ + + jvACFGBSmiJ70J66fDpAHrnTu+WxZQTS2xpi4CIla03wkEiZ+BrlFekODpot8Qtd + + CqhGD30Xv3KYIG2qo6tHQShGG+9GY9/hswSzfjaxMeIJIjy41XzTPdrCFCVzrLqD + + y2vpEbDYhsuujSiBMlOO9c2l8R1DAb6s3ci4X9X8ITp3NT7a5KlA6/Bp1obEiqfP + + ljOYNZUWC/wyBUsVXi1g1iF9wK9EbVcWAgYmEKL8d0wwBNkGGpyMGD4clxPS4QzS + + NEyh5iJN+sCymNWBkyJj0AWQT3G9a3I3G51ubQIDAQABAoIBAAWbAWaNSV6QVKa7 + + t80K4QdH2ddQHaQnjYpfwfQVFHZSvVoF12yODBCRIFNY1PtCEC5uzunJAhXrVTZH + + rp4TGFm8tjg+2Hatd4SHAHjcf+VIuDAgtrofKmUscuVveNuTBxcdEYSpXVtQ8ya0 + + s5Zdb6vsRmrvIH8PGafKmGXfRmqVHAmT0fmV+aOrk6C/Q3sC5JqsyjVkhHUj+OSI + + fmgSzFAizPPEKMVBwbBDHGkWYdvPp+szWrIWPareT6JtnCNL9mDFZVjmVSIdz/y0 + + phHU0D0sGT0lJGdKJTRv+6PVlL/y/6BRZ8b9zVPAHrIpTRY64ILa5Z6OW7PYlhQP + + P9a/14ECgYEA2ec1RSbVj68ttDqNFwqTFA+1wf5sYtlzEaCMUhTsv15xdHWshJTx + + ibGyWHBeVsoPI1pxNzTcGJZCrS5J2BvmdngGyYXf2XowaHGFtXkg/Zmwn5GHvC3X + + aHM71vXU2P6Ye7xvPWQZipK6IWGudAFKvkfvyeWjELlpxgaj/9ZaR40CgYEA7+iL + + /x5nf/+5dV0NLk9xw25oK22r2WlI2qVyQairiQYSjUgR7U1D7t3BKjKZe1P4vD75 + + RzSrEHgxLo9A/7S6MKdJJ0fDjt3E/8UVbde/J1QI7icHimeBndsBo6hJBVWi0Xoi + + VbekLOCBlSY8C7b+6uRBebDl8q3BHHFICk20GmECgYBF9zIokQ6TgykGrKIu2stc + + 7qpqrrm4h5+l8kn79RILZFTDkyEgtP5VOwRL11DDRz/TFzAxDLz6/AxOtQUq6dJ3 + + CZUMUfsNRmmSr5jCKzGHnDiVE9JkfseilxWIsQh14FGvsVJ6gNCeqPwwyb+NKfkI + + 3epFhoF0VkR7PBiehgIY5QKBgQDMWUl+KljAt4MyS+thSfw+GjoS29zoWHzc+NYE + + xXYvRgPhYcUbW5gEy9Cwb986JIGXXxCYLW2UnrxNy2nzJO7/aE6wbblOZOpbbnVd + + VcsV5cehi48pvhay7gxMaZihOZtxUNYUK1Nlgmn+ME4vMFWcoIaA8EQ93PDDmF5j + + oGJLoQKBgCOlFH7EUlugO878go0qGU0E/t948pBGGM214H0iNkxGEgA9YhOfHVWk + + cNpJQcFULt1ue7yDapBypWD0Xh97bc+nuTV0u5mR6jt+E0qm91T74czMCdVKvAzN + + CfYOaXmNMWOJxdT/e+VJr9KDeF5VDnUl2EX/sGJXQETZQRZ5RFNf + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:cwkenndny6nlpubc3mddn4jdh4:op3xzbo4xhsmqwgsjfi4oqztbb23grvho7mlmzgzaq2qudpucota + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEAs6M2GcOwvLQXv7fPJMCmLUSi/ulwirddTqaAIKVQ/sxEovqb + + 7gx/yhUX6p+K1OaQj/Y/le9oaJR0W0bD42ElSjCopcyDgg482S56w5vUJ1zGAjgD + + PMGBB5vSpkuEsuuuoH6sDJEW1fLDxraVt55vK9fwAHeGYnvGkTfwi470ArIj/EkA + + JIYKOsfZ25rJkvaQcJ3iHJlNGZyB/mmFXpl56exkPeHdgAelgmHOgb02uIzoyMZo + + KK+uzzwkCoLtWQutRIowiYUH1HN8PvRhgEQ7k6HbIYA/jxT+AuqrNCW1TDCqLJjD + + Q8KTVt5TxLTYb94+3Ndk08czGjhmit1gNcjgpwIDAQABAoIBACNytxfRdnxeW3th + + Jba+b2xqaXG9FhDBi1+cWpdWmAuXuomgw4lvnP3/OJd7gTVvBCLseHK5ahSNCwMC + + DWC+yFGCFZ2WJHNTJO3EjsQv6WcVFxvT+suP8crTFHftWhPGj1Crfn8CWIvCmqCJ + + YjT4Rj7UH0+wRmwDudTpQYYAoSUwtg2XJv0H0CUL0+S+Slu7mL0ryHhYngOK9qiS + + GZ6Sf+ztYWTW0HTHun9jVzobInL4DxpZJdGJi2+j2WLdBQpUkEnmtIu+8EPHU7+o + + 7hpqMw1s4jHmPcrFBVaxfXhHH9FhXyhdWXe5BgX+0jbeaxZU/DRV3M1MxTvhYTDI + + VYKozvUCgYEAw8W3d9m/t+qOLX0nfo04S6kUb0/QaGvxBa206SzED+L4zUqI1j3A + + oQ1Aub5kRMnzuJoXa6kZa9JSgbaMEXe3sDhxlv/yMOuwDDM78xtWXdYkAkQa2tx2 + + 4O8jkf1+15p9+mKkY4JW1Pnu92kPZwyUqnoeJ/bX/vcSnYJRwkc50SUCgYEA6ubH + + wm042jqwU4b1FmMHSxa6CuchWbQsScwpkM8fgdocDeorKsySeIYTt5axRQeehYVU + + 4rs9/vLUzyPOAPWYoCZLhg9b6GxwRKAhbdfS4thJF0DblgbhDvWIwrGY5g62HEf1 + + yGae9+q4bN0Dsrdx3y9YFzMcYqIKsb3CUJo8PtsCgYEAt6KkoBVuknO//cdh3oFV + + BxOIiYkScoCdyrfP9ND67/P1cYuyo1O1dtxZlGGU6DmPFd/kjCZIJC1bGzVCWbg0 + + Y2XulrdqVJ0fu7HrT/SapNaTXFTJ4/XcxM1MTkq8Sj0uYklY7cZ68LeoggbYXc8d + + PHPkCZSvswfLPFfbnSL2hskCgYEAvRg8lJpCGwMFsKfColvjoiHQcDhxk3nD8UBl + + 8Ymaznha/ySTzWdTPayJMNAhMfWZOdkEZWTf2l12zK0BB6qtS7aoM2onzWmF0uip + + IHiN7ki4RfzTB+nPwLANgNVgxUnwdcHD7KgXrnGINzKP6I1eIJFHM53Uat4RB9Y/ + + F42hk+MCgYEAn31DL0OuzeNEaR/Lb4nOJFJWwCGO6XN/oAujp8bqkuRpkS8WzgWI + + fkJK7eI3TI0c8k9hF4hpt8y6Nh7aG3FZdXTHMBS9PRHaLgpHaIFCihibSz8a6kAT + + DIGjDMXH71CluU5SquvYcb1OY0ruKEMlDv4POOnUQiy8T4NPb9K9AnM= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:7egadlquaxmh52avu4kcwamo5a:svlhtfwkizf4z7adzqc4f3ijpkhhpoocvemtftgwatzbhxhxsyxa:2:3:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:yfkgi475avdtdiruhn65b72vai:v5psft4tzbi7bdvht75xdp7sxosfnlpr2hrloo2e5zkutvox6kea + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAltENlm6LjBC6ZIcNJlDZpnYREFWSKsK2G/FxzXRmgB7wGILu + + gg5bAK2RIv5/qj2iuPc1pvc0XxAEiwzarWW/Slgbi0p55Jnj1SU2IO/Go3iArELV + + pvPT3pUHSTx3+mRYcJyWgeofvC7yzcMoR9Khb04/KV+/zkgfugivS9i8phjt/LBP + + hzQ9SGRLR8CDTBXGnXJd7Ym3Fu6pbnlS9s6VJGjGoymqyjJts5Icu10BGNrf8cUi + + Bkfl855JZJ8cwpyoK9HT8tirHGlhuT+/EFmt0dhsTrUcFZwCqai44L+KWdrTckyA + + qrlrVG10WEjRba4Z5dDFla57E6dyhRtXTZ6NAwIDAQABAoIBACjevi/mBSsP3XMg + + pg+cGV9i33zts46i9XbdF1n2EVDnEWmTEc9s1Hx6jLpO/YnE6jP1yjRVCXw5ewGz + + mg8jY5NiDRTSOfYZPgSk8OY8FDh4j2YfNobnzKKlADR4jorsZosd5CuQpsj4cBQS + + rvfHvLfNHJC5weDE6tQfRmHnejgIXvYlL0XVZokLzQPpLmvqjA1ueuQp29pUjUQt + + hxcsYwtpxf+g/LGhRxBl3HPeKID44bdsN8Zz/hzkqE9F24vKFNcuvjMnK8mM6oin + + tu3fFLrYhXHzQIjQjtK5UNMFxbKZe1Ya48njuEBwGxraYP8WL3MjTqPyyjDPb4Wt + + tFZLUwECgYEAwzQHBOE9Q95aosur5sXawVMdZggKK0HNx8uoOjgEsX27gL63emSj + + QcCv5ccPX3fbuYKbUA6W4vQ44z5/0EqJ9sJ44631FigwD3U3+ZZzeBuzGwszgHHP + + Byj/CoiQfCV2lZdwhwWxyHRn6IKvAuUnfiaVzVHE3EJrZTkx/qD2El0CgYEAxcn8 + + PZL8VMQuPbT0+z1z3x8NWlZwUwl5y5mqpkji4XaFWoN7AYp9Sa0MARO/J2g918jo + + kDMGR3tveMX5x9Uqq2WbDU0dQTmErb7skB62qZNcNA2k28/V3e8/ijAwi1EAaIcM + + 9PaQmZcFnEglKuE3D9m2j+poQ2+KABOtd/uJ5t8CgYEAkoW2ExKi8xOvgu1Qnku7 + + dUvXEGROhcPCHAuhvfmYhEY1fWEqxgNOjCd/oQF3Z5jHZItF26Tn23moTeL2+7lH + + r+Kv7W8BPd1yndfF6WHmUKyyF0WkJfDHjr9WGWkC0z0nswfWnnNGzImcCWo2xfyO + + VWHPJiwPkamFhZiWD2Rw8L0CgYAXPQgZ4+8ptnMIZP5zlmDK0kcrWgSQfQiGV2Op + + bd7aRqacX95P7AmUYnSKm9tVsfWyKLTKXHRcabBLLFeQlwcQZDu3cFwDkdJ453m7 + + 5R/pBJtMsl2wRdcG4FlCzy6k77twjI2FKoMKyKesGP3k79kcT6QXfJ8LbUt1ftpe + + wnsNWQKBgAyP1Ehw6s89JJMrVQ4AZwm0xsBBdLQGcFKxuSz1zfujc9GT56nY+sbr + + 2PbSIwCfNirtErxPvznuciUwoHJVLUiPryQDR9g4+fq7+Y3TkeJXhzJM2GMM+se/ + + JRDDbe/EfL8E498RrE0BvyzLnPsj1FWHSRUpqNFsbI6Qm+lcS//2 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:qv5ksusf4pk762lpi5rn5l5eqq:pbsbizy6dyjzjhjr3acia2hbfqlim7zp3o7ljxlzw4vh6x7smk3q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEA2iBFBQhED9S2ED4ZeUbf2wLzriDl4rFDVEecZdabAKqh58zq + + EPS6fqT0pUAH0zQV3RhUOEXLENcro6ilO6gpcDminsEsm7jgJNCvAfRF1JCTgMQI + + eLuDE7FvA+ZCdvHQRyok3RIn41qi35qVftx3TzQjsJX7qKDhnrfhuKmFIbMYeQhv + + 5PZ6AFWWvdwFQ/3fpqC2yRP/dS+7Bub9JbXm1t2qVaFEzFj7mwSTnhP8SMT0I7rE + + WqZqRfBx6DFzlBshzovCHT/QhEk7d/QyviH20cqPqeQjNAImsyfFKjnxmIBM5F7D + + eXsfQSbFlkGP7JAqfW990KoBh/9RxmBd/5vYEQIDAQABAoIBAAiyz73PIhO1ilsk + + dtSYyHWN7RTNGA3Nvt8eCfUftUe2BkXdrJnngIZrYpwybP11rseF4FnsIph11DYv + + FAPIhXqFud/12ScOnNWrAsejq6M57r/sUWArLiN7aG9x38WpiAJGgnjUcAXHiAY9 + + vmd0OEfOzvuMR6BmZgjz0UsRa483589VqSk4y1v7v2XjqJ6ubWPlXvvhU05dwMEh + + UmHHGi08/MLdsDKaKUMj8Z+sq0TLu+hDyew+fYEcFb3lNwwkNgPxiShJOp0LkhGs + + Lx6nt7f8FBTYU0x4vcrvMPNGz3cap9pJrmHuxhHrxSC56lQE7jYBiixgXBiFKflS + + 2nKagYcCgYEA5TzUGcMPQdNiCGOGdzSWsmrQNhPvA95MK7ChRI3aCzi8/f230oX4 + + uJVJ3o6CJ7rX00iplZbASWD2EmKF4Vr2ko34Z107Un+0HdiFrkYPcjl6iG+JL16T + + Lotx458Taa3mbHwGWtH82z7evWZtTG37RqXDQrIocRwJrkNPEjcpuS8CgYEA85da + + PqKeI3r13pykjZYI49XR4shpMFF7xFdLG3eJMKgNxLL2z4vvuicP5oP1QhG4wKqD + + Ie4gCxcSe+4wseBGMOiPVBtSITrICkDVVuM/r8W70ae6luVx4c38tll2fF3IKeC5 + + 533+roN/OUL5h4d4UG30/g3AvxupYggaxVjIsr8CgYANQ4fCNdccJ+70LU4Kd7CA + + gk2p011xC9u8a2vpW4vSOmY1DAkm1Tme9IRhrD07r0PtpbaqQR6/IC0cwzab43eA + + 41YMJQjZrSnu0Chr/QHHyiuc2VdGtmItv0PHt9yXsMg0Xri/aIcI6IpayyJn2bVA + + UTcLFOPiJ40n2B0rIKX5YQKBgGMFRrEph+FibapVwOqxb+G2HMD0uRXkOczBs41x + + 1ToLRrWMDpqmBwiEMomBYOS/sXvYlL/pPetkMKZiWDcmtUHSd9k31fYeIA1S96Z/ + + cHcyiTwb09TdZqLlCnLSAUFjGigz6z54UFx+pewQFsGKR1VirXHNA2psgzmPk9pf + + Ug6fAoGAfqx8mQe5FKrT9gvO1TXIwFZopjd4PGhCF/QZx/1YhVh7wkpocnXJQRYB + + LIwKrkybc6c4pVziJUKWop26kM3Hs4G8tZIWy4D2GQqpzTvrabvU8SKOKcoUssof + + pMF5GV25DLc99P/xQG66qK2+5kwqU8oeaf8mElO3Um7YAPLpzYM= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:ej56vl65kawat62wsxuvbcd2wy:tv65cgghaddq2p7dyvimmff24l34wsx6mhzd3dyprfvrdo52qtma:2:3:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:6h7uw7l7w7kyvwnfbvdez5iqii:doonvzgovuzwr5nzwltigr4s5qnsmopyeh6a47dgi63nn3rdzhaq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAsugmXmLZaZ+2aa+sz48xKVllHO5++98qvP9YdGMUa6SdPETB + + lzIIrtvff8Krl8KjaeRy0TW7MpSw/QO/BK8aDWPdAmLhSn6gayt4Zy/r3pCgM2Ed + + a0lkTL+d/+J/tjgGf4u3h+SPktv4plhqfU8ZTHi9PMFzkIdz63thUC+RSSrVEP1b + + KHzIXU4Q2nKVG3TCTQp/yW6ytv5OBqCu6Mci9N9UF6fNecoSKpLCYl2iNYLHp5Z8 + + 1WPwLLdKoCWwDGT1ufkyLb6nroYB6V38IHgb7FKFGXOzcHBPd3STCY/oFiaTvmgn + + oknsBEnunVa2kmbyOfy26NOZ+qdqmpPGVuoxMwIDAQABAoIBAFAtZwiUvz+tUmgh + + 0U4Bq7QOuphRL/p75KDnxIIAZ0Xoc4jvfVzfkPGgWxTcLt9n3KlXtrcYn+jGp1z0 + + oVYdjQzkLMdlffbPMeBljmOcH9ZSNWFhS/hpXzhgBZSIMtj8WbkuadVOcqOLzm7q + + H+tBmCJj19cTEVH7ylEFrbJsZu2FMipm+Eirn7bALbUkPlNlzmcjUT4Je6/OOny3 + + rjMEOhQwnfhcxTL6IRDeu7lJq4l79+1+7HlRGazt4QrH9fjAWNJaWZyDJEZ9wmge + + TQKueupXiqWC8w+IL/3w+8arPYG05iSxCtdb7ehzF7FVAKQ9sw80YahsbClQHNTH + + XAwZl/0CgYEAwHwVf8AXyOIDgGAozn8IcmICdlXBf3Jr84LcDlAgtNtbx85fZGT6 + + r5aMwpEByg2RyhDCzx4S2A2+FGhRbvjUFYV5/Nak/5hN1leTVAItnzWGTSkcJuVp + + 0VC295BhRKBjdmZVBc3zUIwGKanD03NcKJ99nxXGm7bmmJRrMO9bxLcCgYEA7fEX + + ef+UDJeHRxI4oH5lAEGwydwJ0kIRB0DfuPKdhXFEY4ihW+rppY3A/NvEUZAil08T + + f8MUJEaIF8MeaOCSvY1M+z0ynykEAkFxkSfTnCsJqMh0p/2aNfrWVDm/60lbsGzd + + nT0xMwP7RDn7VYCQpzFSlbgOTwJ/LEFiNmTEE2UCgYAo7LjtdnwYG+W+r7M9ZEj5 + + eNkpK8Z+QGevWI1NBcBOc60p6Djj8YxTNOEspQQKX6Q1oCarPqunABT/5cYaoBEH + + ml97YG+oYEt8XRZX8Dae+RRa53iy1GgRNuYP8MSdgLRlAhDlsQoggAT3ar7WAFsB + + 0Bc3cbvOc67HlhbMSrfqNQKBgQClIQ4z4oUyf+6oCiM2bsFVfkFctdIzExqSOBmL + + VwSu2T6m/OlOyya/eDMYyMPj/u2iqIRVxGK0EibcptLx4fi0h92G9p+tCV/42MYi + + AMvAs7WOZx9efoeJMr2P0kw4075IICVkvFTqnLbCUKL2YbUB8x7nPMbhWlA7vFyW + + dzQEaQKBgQCrN7DDrxZapHLMnyL7Pjgm7st0CZxMxbcY/dkmw/7yo4X4tUiTyYoU + + oQqtcEzYKFrgQ6OEtq8i/9yVmtgE8k70XVJqpUGM9VR97MRcdzEKypGBnUKOamcs + + Z28avBZ3ygIN5L48UK+vLMayI4m4RmUtMtU0jFYkhIEcuhTWEyGQcA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:e6pfkqn4wpggq2lnvc2josmkpm:hcfjov4qzb7fkiucisoes4edaymbp7qzlmrn6rqqbt6tsov6ojaa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEoAIBAAKCAQEA4AffDXMatwajd6NXgtaCi9gCsfH/r4+0zwHKTdwl120zd/yS + + 5HZYFhO6TbCAuipADxUbKgaRTf7NAo9NY+T2Wke8UFfds+tNfKKlg8uGIKC4IsHS + + E0ay3GVl4nCr7y/Y5Rg9ECmIE0ROM8b+iDKVfgD4ztigPQPv8r3l/XAzU1yx6bVf + + n2Sz3QzCHlkjbmS7UpcEWifUG+8sgO8Ee0zBsOjdFyaOZMiaTUPlNvosXvKQUGoh + + +aBrEung6ZW9ahWKeBaqpGh5D+T/pqWIzXBX//W4gMS0v7+GAl8h/JyAz4yW4zac + + ox3br5okjgEffJbClMI8mU3ltxDTWbKNeps4tQIDAQABAoH/cKOEgofKwjtLGdwG + + kZ2SBZlM5is0PqNLjoAOyakvprMcdsnQNemTzhgdJhcqod0uoUIf+JOd6OJYMV8A + + QRUCNc/bla5OygLN8txmW7j4tyXOk6so9Igpru+Vk42lLea8Jry/9vKhnMUo1bsT + + GkLm5uFNE0VFS7Fl810+IS7/esTmSkv+HNNxFUHjBDEx6ntLH4JYvZ3Z6Brfum/N + + Mq7KBj26v+ShSrTn7uC1cQlxKTyRdudkpRX8qiNqPrL98b/KrEGaCBsyODx0JgA4 + + Q6mCt6zdniHrRAXhamFdO3f8MEx3VVYKVy0YyFsWjo4DNhWVKYQHil143CoEwXku + + JVlBAoGBAOdJUfNvYyawktf8LmunH9WAjpqDtCm8/XJomwAD1ozf3P522+yg/Dxv + + 2bwW4b+9iI/hXWuXJ3RoAVRfSy7TVg7xN6WmnZoNzv4tRGCGAOqg9+VYy57IC8Ya + + 7HIgcBqbcVvj1TMIZitRDl2t1sSbzdunFJlbHKfq86n26D7RRERxAoGBAPf4E99M + + NiY3TaaI3UxyY7xFf2GrVlwMENllj8RpbbVByQVJPxR4Hl7dj4aJcd9PFnAfaDNy + + SIqgbjcbibsNvpY/daFB/vtXUS+XKU3TLWOGHZ+25LKVOZFJhZfpSqcZHjCl/Tlg + + m9Ou6Bd1MOTcnUWfECIi+8zVpTd3sJQti0qFAoGAQHrpdQPF0cCCf+KXkn26W0yG + + 9T7omIZO5nmRVPS8+PNkajD66UKMb9EDE/QRJeKSUwKSh+9RGZvxWvNiQ4C5ylqn + + l/AWmh9laOl32a0iTkdoNTGHOxIsbiONbdfrSQ+zD9o50wtxaHwllCpl6NRDFQzE + + qmiDWbEgE295miG/dZECgYASV9egfRLEYPLtjtJQBWY7VyjFINeSl5HngwvPi70B + + 24vzSCfSa9BTVDB501EJI+CVCr26kImtN5DvoqndnHasxqT8+NTT4vGug5AaobSJ + + 2DH4zp68Vy2bAcVQJ4HOOp1xG9ZPmEXustGYaqLjSy6XJ90ZqVzXGjbOk5wMWhIj + + wQKBgHgsuqxEqTLQIqn0I4E/VAKdBuYaGngSUB0frVKn1N9O3HtJhG50L5yhWUUf + + UvHCgaP06ft5YLVUbTkelhgCbG+VzsFAjRFhesiHp+q65gCZeQJN1Q3JReeFjaw1 + + ECQqk2PgtN/3t0VVrmuyLBcw9RETnN7f2mHayo0uU68AU1pk + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:ufshkmuewwql2xsyiecbjhh7x4:qoywwygjqrmifowob3mvwkhfskk6geomyw5e3qlgqzui3kymu6nq:2:3:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:zily66v5xodir4wz5conizmonq:6zksu33nods7hita33ju4wbvlnqyxp6qkl6mmtqyl7bh6gk46isa + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAttP9lzqc+4EZYh3s6IcBlfOpaL7svgQRLuXBYEwd0GNz4FfN + + v6L68CgaD7pI6vgUZBOnYm7c3z8zBdWibpH3V0qBufWnfFdtYU+20ed3wWWDoV8L + + z60tj4GNEHxwggLIclX3IalHySFyOTY4K6lmYptxtFBksULuYqFIZyX724O17Hf/ + + H9XGx+D6ffpUyR2D+hZpXGy5ly06pN4XJsdNkgmv4YfboUN2Tlm6Ldg8b6ni9P+d + + BhjdyBqg6E7RFKG7Z1ROT+GzeN0Q61PNKPJ8/5fCYPoZEeHWWfZFNO/c/fAo7nsn + + 9Ei/HxUju+PZmEU0jcsHXIvL9LQY/2b59S1dnwIDAQABAoIBAEQ90HP4Lsw5nc3f + + uaP5cIAWGO++BAPQ5NEKdSmKf75ewMvGOkgDf4LQlRm1wK3jt0i7hUjadJrnrhXJ + + bf2zgg0VBGLy7Hce8vbVmDm1GiAX0hATuAbmbxEXnB3BNQVyIHt81ue7lc3fLBFq + + yYCSlGLN/pz9PPhlMTGjXbESnnWKi4NVtX/CZUUEymgfiynfdXCf7s6wlYUp0WiN + + LIHBRNwW4FMCvp9Du4W4BvJufWp9v4yCoIpL2SyGbYE/P1dMg+8ZLVHdisSN4+N6 + + V5+xVjcx/5IX+D9FR5wXR3LXZx/eMa+dsEvAPmQAJTYUAVKzMNOXoixCSsmyV9qj + + zRB7MFECgYEA8fAAPiq1W2miLyTR/bKMHLIbdrEfMpGTrSVPTw7PdYkiDbNzpTJH + + uUwxwhHFerrlPAnxsGbbVZG7iT408a9gBqL3fOCP2095f3wg3Hxu+iWtEXLuaGJw + + hTOKgN9mw9LtHh9WT9JBeQgHU3V199TYNdd7a435jxf/+77eUN+pYZ0CgYEAwXRy + + +Q5+02YChU42JAuCnOITnCLifK9U38A/YaaBtMYTpVd32GSefCv1emA1KvnTjddA + + m1br82oCz1US5YsZsfdmdnB7mA0AGiM4GTHfUBw+N2gol24lCY2+wsi07U4z+3K+ + + HmGcAP8FLXR7/slX/FwYlcJXz1qxYIh5rWnnhWsCgYEAj18PdcevY3WM4+0o9/O3 + + 7kVp2wOJnlkAr4m9nvcC3/8dDAt9C7dpI5jQn9YSNfHNaK/n5wZ9Eg9jmCgiDdtE + + x4oJqZoWBfvp3y969c5Toa90CTQXrgov7e+mM0qwRnmXhNNDPdg2bnfgh4fDGdOr + + MPT6MbmX20F4tAHfEwQIB00CgYEAiAedLNnvfjC1xwzG7zOUxUIHLfwtrCURlkA1 + + kTGm9PlvKQ1HPUcLVh8G/uUVncGL66oXSOOnCENb9HRK1FOqXsSrLM9NaQ6DKt3m + + /XhfIZKqgQVhvZF6w6wDHi5JYrBhxwbY/r3+F4k7F8pXwkHL96y+sNe2LR0Fqu5s + + OO9GGD8CgYBKoK1W1QcPbScWEehb0BFhDfew1dARf0M9BQDo59n1IP/fJLAj+irm + + dT0Qq38vskUzH2nlohVbOiLRnKIqx0AJKYCpfJNe3jYkzTDenQ2hONwhK+0I4OWx + + MHe2ZVX046Ou4SvrFWoDJ1xKCeF7sjw22SEaF41OWyzyarhsK5pDVA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:nk5g5nxt743nwaoqk46dl2iy5e:jpwpdslpyhgafsbny34auvuyh65h7hvz3fioq64efhijdz6aij5q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEA6bFJtYwt7TfdVJpjgXe/PTdvk7MVxPiS8qFSmtFILf3Fvof1 + + hmCdLayS4QcL5EulLTtotvmFPb4rG/EHEwY4VWEwulw0FXcoi7gPhTYwbyf/MPBU + + IBI5crgXrkVRBY2dqVKlJnds6EjZ33jgs3sVx8q3eKUmLencGKhalUWGiGbEtB9z + + YgpZetlWdXObPyU+KSKB6kv3RhHsBTS42WxQho85wjMiT58y/duC5IvDcI+ibD2A + + Iknql5DnN7TdanjpufGYh3x0nUhOUlK9whs+U0ip4P+YooWcB+ySlgsHy2lSOYvO + + fgWFWt1Wm94fFyUoRwA5ZUSU22y8lkVpVHVj6wIDAQABAoIBAAgd8fsjU6kMqrG4 + + lxeKdZMGbOgKwrPPv9LmSuc5Dl0X68QSwYgZrPvxeuc5W8QMjeqEnhN/lo2EIHKH + + rFY7KL5rx3SBpVwlgmav+Eyz4CTMP9nkTxe6FP1owDHREzUH1opou3ca6NEnTqIA + + zH/kw5Hn9vgddwuwjBuIespP2udmkWo5UXxD+3irKP7lG46OBYF/QHQLrzklXeR8 + + fWyUgTxKD43D1RtyyYRhV/7hNTrEgNgmzEMmFVTpqfBMxOu3dmBuC3XfORm87rPu + + lxh1glQ6YlES5zYyl/tSNa1CjCP54k7z6Z7mIvXKb6LCrZYw3gjCayqbec1n/OMq + + trB+xwECgYEA+Eyq+Frp9KwiGwmAZwIEhRicm9e92fO/v3vQfR4Mz4u3rFSzTzQM + + P/LXRx4YqDs04WJHOy0+oO1tiDoaCQbNQLqKy2xZBukGiUX+K7koMLieC48eeZEF + + TFUhbuTDMQWjIMlFGmWDG/L3yU3HGPazUkJSetf3+Q40XkVhPUvX+GsCgYEA8PCm + + jwSP8p+PkikseJ2q0aKjS1RUZDqZqF+WeepQpGQSnMeTOEqh34fm6epggBbVHk7w + + 7+efTuAx+GRtcgF8anGT34WGb27TsfuAzV8jsqb+mnttjcG2f2RGGP5KpJfjGeo8 + + EU9hZsCfLZQBd519BPTrrnePNvlw8Ok1iQ2pIoECgYEA2KBC9YST4uQeqUoD3Vq0 + + SM5tK8Xwm+t92fiSr+X8tUInT9Fh0vMM0On0CdbnGjb1bsGIdceGgW5DhntyZXeq + + sRNOriVsEoxRKIiJNOpIdyFKubj2lIcCgVMwZQhuhyFs7djLUjlIRqUWq2kRD+WE + + E3tLbGNps79BzxFmwcyestsCgYEAmb1U6klE+NHrsJ3pLIWeq+mVPMnwl4v05EUq + + JVzoXB0m6zdFr1Of+pwjMftF3DW1g4Nnpg0r0A6qlA6w72AXXWxfqO7wm0Yiep06 + + 0ND2XFbGexhrDVsf8iWvvN72DhSE6tJVxc3bHs+mQlUAoqyxS2pkwIy1q6R69p44 + + dN1soQECgYEAj7BSQZHlzSfYK6SgZTiJ2qDYxsIkcAjCicijT+5h7FJd2U8pBTaV + + 1/A6UbqwmoFlCXHuGUIOpI69V9nL4BYrzBL53RMkpx2RSvSwUeHW89wsgZh+EB+v + + sgq76XdP55PL+2oJNJEsB4vdxQbp40kNOfmo/bEIF/vurNYQklKb9FI= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:sxrylthoxskesmlhrfuxnifkdu:kizgaeiazgpjgsffkotumbu2dtxziezw73ybwo5pfzleuckqaiwq:2:3:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:2tvuk7uigxcngmcxx3nt53a2my:ssk6vy6plxp6lp7odlqhybbjxs3tsxe6j2ehogpf5b3ml7wgkevq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAwHgjo5YUy7LGiFX6GhFgnv3iB+yzyB6jjIrCjJe39OTI3v77 + + DWqgLyKSUApAaSuZ2bMqIVcEvTIrBuWczfEhPm45ZqpvR57UqNnAe2z2CDIlTNS2 + + Mg7UWNaQigrvrM9wOnNoANXb0Gsm6n1KkY3JTszsAH/P8vmRXvm+rZsjeLwAqkO7 + + R2eUYme0hZUldOHHZSlmz9FAge6ajvw/lIIVg8gbk56EHBlpJq4BTK48REm/hzVu + + xQV0JGeak3zl7GWALoJXtkS81NctORsg47EiTkTxGEgXS3PXqDImEKoLrX9Sfl/f + + kjvpxOsnTwqBTu2fBhUJREoXMbJbioPFwwPIpwIDAQABAoIBACFiVVAxHo9MhZot + + S5HM9NTvFY8pU+/AvL6KbP9k65ALRPpFAPfNSFaUqQtAE/cKDIgRxxt8VAKbGpJ6 + + Lk4cZpdFGCjCJEYoexuElZnzBuPaCtU+ShH5t4RnRy/igLsZSg6haOdIMPYAOAJR + + VCdWEBZefgsCIGg1OK1gJV5IfAkbSXbgUKQrt9FNu5Nbt5rRuuLg2CbB77UAXsiA + + tCynDL4kgx4sgDmU496tU1Wt60flwb2Ka5SwnQwkVDM5LLaubMyKsL9clFow1Oyf + + TwSsERNPxrYzkWUFhYxQmNUZggzdixiHdKsqYCnUzPJ8s5DV2iKSqQPVW5DR7FFN + + MC8ZM4kCgYEA+hOBpsfBTt48yBCPAUkeiLwcF0oFrQ2Q4wRZ4ldtaGlD5J16Jk/4 + + HIx9BPvfsm2Q7EKZC8CfiMEtBVhjZZmJTWbZz5dH4SNZwkaxL/JiaJ3acWylZmj/ + + 3BUj50Ysh50OCfgosXLUE3vALQQRGfQrYxV8SRo1UegeK7tX2pBZzO8CgYEAxQdM + + GHlKaUz1OgPgDIj3goXhm/c0qB5Nh5k9LSNsz9kfds1vEZNPBEES7pQAdKa4EVaw + + 7C+k4YpcWDAz3Nzt43bJu0CXi6wmAKEh9ocwk4f5Cms1s5uG8XpNcf9wcH806xu3 + + NxJgaMDjB7slDAW/DFVhPGum6E1z3fFYlpI+L8kCgYEAhzGgd++p299dcLMy/Hjx + + Hu7DKPwFkYax+2jQxwKIzVeLMr7H2IqHEbgJpnYcezOsk211m9ro5F+63RbptXWJ + + uuSNgCLC4z3fOp5JECizdudPvt4DlRfSqsJrBI71Z+NKQa19ImF3sYjHXg7CyAsu + + oYRuCn82sC8SkIXZevlq8tUCgYEArxphIo8I9rSSbFDtWbaQYcuiSf5VKeRketJR + + cEA/gCkysV66CyCj5OAAd0/JZ+KTS7WD3yQooNlaYHXWYb9nG/SCLIynIlaIH58U + + lAhpv3PkfMHzJABg2VMcaOffgdtLqHclSShnzjE+k6xarGie9dMba5sw5tuO0fyg + + ApFN+yECgYBG0t1+2RdeRK6z/hCoiX7kr+vWeki5uoJ2dpt1OfrgBv6ti0qtQFXZ + + rCcE6TzeFy/z54TG2kGwA4CesO5DtaTO6pXCHuMnP6KSm7pCCjVv2p3+7ZjxrRdG + + t0FDgTvyfy6hC2ecVKfdwmJtnarH5D8f41hUSzAnctzaVGJ88GJBCQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:zy6rnxe2nwn2v6a2whohnb6qcq:gisq3xdaad4fzcle3plmfosulcioxsahzvc64aaftsjdetlkfvoq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAxZUYtjBWRWXbZxD/kkUFjn1ZzD4xpFq2Ti0mp5z5OJYISpRN + + ssUP1Xb0YnPY9w1QID1/ZG99xvMyTxDAZ3/fZbHpsnkdi4MRmGS6BCpa55VTRSyu + + VKqt++uTyanxpMVX54pCjfkWsf7Lqw2n7SZ3DUyVd+FL5gka9Z1GwxjUJl0kTaDY + + to/EQtEImLqmPZ+Rhx+FWatN7dr8dfiJugGaXlkEspkCxXHKbqYKVpWD/6bkAVGm + + 6+ILTVwT0jFWIiY6ERAJ/74AUEudGKKbgQCvdowrlfboyPL9SXumYPGiWCn2nM5J + + tLp1px8P1WOWYrSL7SQHiNwLhwdeGt5YKOfeXQIDAQABAoIBABv9JbHDUalFh0nH + + oOiTwfiAHc0ev1IArqQO5dOnGy/OoxCLhyEspLRQxEhBEGpY1rGmfIoZ+BeLgmQs + + Y5EVzmvdwtTvLsYBVGgB1s75wARfxRq+vFhOkFRoN/iAjDRS50OrtIdfkn028puB + + 1Pi1cvZtk5vWjLWisxC5jZlcBkuDtNk7tUeADjzUa09krQUHNoZ0pXb3T/39shrV + + gbD+oz2H7K/rKUHhj8FGt0DPZUPqQjnIk1nnugIdPqWmwM29JA1jjOKw/DLam5O6 + + Mx8VwSBc0YeAr7jsx9xBvqHiV6esSmRcydQn5wKMNCXnbAatyfkBxbyPNRIp/R57 + + yZyFYdECgYEA8hqLCZpfCnx3fSUi86+kx96BfBXm5R4U7wfVii3mTBj+Uex1J0gP + + 89KaOEDYAkAQkgZ6+0RqXpoBx9rRSH+X5pDjN2l5Hs9CY4ZCqeymt21aw1D+KV3R + + laqF9fiJz/8YaLunOgu1WosiPrBupIEjO8k3rogbw2tV4Zt8ve5zJRECgYEA0Oxc + + SJ0oFMveC8NzSXllNJACPUEgTC4qMExOUWWd2LT1tmI9YxUD+5shTsWRjNMzBL9w + + wZq9TBFz2gPlpFN3HuE3Psx1J3BYPHqFiFvm3V/erZ5mB0Tlx5TEkTI6Z4rZlr2c + + OOvEEoqwTDO25V+AS4i10XLUp/Loe976zMylNI0CgYBrlqgbCGMcAdwH3Sz/JhsQ + + Ry07u2/0eb3Ly6t10Jf7UVATkAUwA7IzJHAsd4SG23mBqyeT6f9rMv1/lxpSIYGb + + kN+ojFKrAmf6Wnvdj7E26n3fNmr8bxjobfNCL8TujeqHAH18Kh/ZsOLzAOzqZgkG + + VJFOGmZcHaL4s2Rn80NwQQKBgQDN0k0H7Gt0MXPLOv30wHeH1Oef2O0sn75IXqQ5 + + ZFahC4WV7Cp11lpaIXYq2FCP3/E/GCrJUNx0eC0d9wDhZqjP7ygx4dL4y6Dh1AKB + + V6iVJsGFYas6NhH5EQKl2EnZf9zkuF+TZBGCAse0Cq6AQhluUHxunyYJXzDR99Y0 + + tNd8cQKBgGhyn0VLhxicircIRSq1USwAmq1447wQ9JUFlhVlGDnScG0K/8fTKqA+ + + O5nP8tMyJoTRrTxofYQLl9PwENP3wCXHQNM8jUsM9g5nHJrc60cf9OZooL7o+y8/ + + Ntkn/f1DLOpYsnIHg+FLPBomF0jX6fZU0uxymF7XJU17ZW6ALVrz + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:ld3thziutpaqv25nbtoqebhtru:ri2obsvzl2etyuv3qnchn2wvw5mh5rjuvbjaqkqbvyprn7xwamoq:2:3:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:dgbwqgau4tc3ndunfr4nvp77xi:vpob3vkn4ogz7vbkdspr2kge5mezvgf2sb6ghpjtboafjih3patq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAvE+dyJ0fXNy4h7KR9nekUSjgkbKUektsFAbSPJdyPI5Oidyu + + CPCCc3p2dtyWu7IvB7psDEqaZpSc/brUxGxtW7AJWybtIK1MPCZ5ZxnOYUDkgaLn + + gnkukWTB9+ugXSD2oDqK90DKCGQ4PykUynehYJpgS3B86hdS5MzFnrTcchzU/9SL + + Oii6oykEtrp+u3Gx/Nzx+n62AWlcvwcYlVN1wwHBRBSx1qt4lTUh1crqR/cLJnLu + + nNFuNC9rh7ucDDcml0HAERddsEwXxgzNLt5yPmGSlTTP0q01mlBHfP4FMpijPQP2 + + KQUULouYCebDEhWa3A93XU80230BQ8oX0bGmqQIDAQABAoIBAAvCuSr3TScijc/D + + wkPvUu7Sq7vNuGIu5bAWgPjRyIupo5QOmTvrsWn+4vkna66LQU6tQOQ/oIb5jxh1 + + m6Ys02OfieYMd1DMIe+7w2dCAFaok9zYzLakVNk1vrt6FsjaLyzwmw84F6YQhEbF + + jQvcDtMWsR7lBpgkHsQ1Wb5As2fY86walvgkbcM1pJSwan1HLDUGNjTGyXQZn1A6 + + HBDDpV8aHjoObUwUtmcYZKw7KIs3Ft681x2ykUUPcfVPDqCYFCqM9M54QAMg14QL + + 0hw5Tl/nEnPuiWRQgiCmsmAGuvYJvHvkA0QzjBo8B7S9wC9VfTaAHX33+IZ9e6NQ + + 7mXgCrUCgYEA5gLa9HZuKSC/vJuwj5yIp0BrRKyACOl7YYej4+/TjGiMPqqHDU0c + + MGTi+W11tAnZIwr2xbgg+rBgxpWwrlCbwYb1oayhHQfbsMrGc/RHSl48sjrDzgQG + + OrbBU3uWIHRRsikislaaCls/LUFfVddEkdoA3PqWE0cg0VRInPe3oqMCgYEA0ZaS + + MjUpd9Nh+hcZPyLPLh/toNvZYmu8e1HRZKCDl982kYmQL1t2e80S0D3P8NshN10d + + GWkuW6VJe649+FMshBwMXLlVQsLHrQozwz3BFil7eudbmJ1PU2GZZYsgB3h+sy4+ + + Qr7KVtU6qGe9+KOZ5eulJruyaGpEKWF9vrnM8kMCgYAtyIG2yWASFa+0pjTV0S2u + + RPdVGxT9MSRa/HnV5CXyu9i2nJD3R9MFmv9G8M/N/2vWOtd18bm2zKbmwGMDv43R + + TsDT5p3HPoovPZ2U9Rm/ptRkEahp+IkY5MnEiUQPv7eHRALhBrXwu8rugiWs24WN + + lpw3YDXBLpZMtH8jp3dJCwKBgQCAg+2db8+/tBRt/9/xQOz9gYJ6kpSXryxiCed1 + + 5p8Kb0rMryeEgncCrtsMafqp3BRgGG6ReFd+xrlqZ4uES6wOTgyeht5rE3jQ+GKJ + + I8LUThdzY45c5IkRvdUL2OWI7y/xuzdeQhNcb1+KiCKK5famb3pTZ+Cb+h1Vqnwq + + iU/MdQKBgQDVlggsXCqDvj9BPvdyMy+PpKKnYlixAt6xdrvLfMCImhvkYvJvmM2A + + WK1SaZqQ50ETTaxMyBF22NOpm133yadWSpBWIA59MBi4PAbVkItAKO7MDbvSXNOr + + Eqxj2sI5gwHV99+NqMcW1psLcFDb5E/N4SZQmuOKblpaEJTlZ80L3Q== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:6jynferbnzteludtwg2vd7thvu:oek57a2425optdwaggj3zxaffx6i7kzlbk6sbvje2lphuxdkoakq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA4110ZTjzqHn9RkYJDatXxPP/GuqSc7RFisqXYr7BnJ7fQZo1 + + W9Qij0tIMi8wgAkb+r+oeLaTMQqZtnBbnsGoWEk68kHFSglMInkTq/MZDgwPFbKe + + gaMdGQU1k0IAALu1Du4RPUWPUTsuxxh8u5dPWelT+SH99F7vxv6WZ4pk0N43hfrc + + Khfha+oTgBK0rVq5DmmZ2Fd0EHw0PCFFR/8BLrmyZz3jvuk1K7StW9hqXWqNILJk + + RL3FEy0rkYqxZuOXQ49inJE+o24hNYSB01H+IVZRUDB6s4/ZZBRHhrj1Mr75KzpF + + y4gfd70N1vVi/zOVj8iMMCvEBdXqDUdPYZTSFwIDAQABAoIBAC742jilTPV0CmbP + + xkQML4xRilUhvBLqXemgFCmC1lYInoAbn0Vy7JblCyvPAvqYpy6lFOWndn5Nvdbq + + nIsOYDypGGP/QYabqB6BHBbMmNMFm8I0TjnjHHpUUK61FnIQVYYZmfcqHUM/clkQ + + johk6LBfG4mfQ6uOR4Q5iZInjc92jYi2XAsDMaGWefVsiTFGpUUjlYCZ39QWQv8k + + JoxsXWLM+qyxYs+A1xyqRa+/mJLpuUV2uQ6H7rDtRlLiHuz8euOibUQDDa/ovXhW + + nId9SEatxYs4E34JBfc1ibqasboBVtrWhTel1OmF7QnNYZKXBYl3Zf6t3oD64m0s + + lkCOcfUCgYEA+qkiX25dgXAqyDrivkme/u+PnKXhxiA+2wdrY93j++dhi2mbIhxp + + 4KwySBQoCkHydawkdceMikS1UKSakRlJl8EuIntv370gT6v+22QxpWb/M9GYkxZL + + Vju5/8Dm8QQ1W2LmmaGjO0ef/+J3UCTNGncAQ+ZTNQSmy2Mi7uppg80CgYEA6DVJ + + xH1/neG1mlzg9GX8g2Ckts9WtcbBK8Nifoavo2ZwxUEAptNomdURkSx5vFaupWkK + + LsoDpg2mEfZzF/QQ8sqvqZGsC4bvajlv7YGJWFwkOwTasSYVQK70wcfy7aPeIG5U + + LpXbFixMFgsPbbIH3VdUfiLN4bzkS2iPiYomEXMCgYEAyijOyBjC4ToNxx927/GA + + givDr5s51Aj9qLj7K7gxv2CFk2LA82nnGoTGqMtY360AV1dWsIcYGgwAD+IxpwS2 + + DeaHxte3CsQF4zvceCT+xV+kQ66vVzGL4SiagmKZ35h9UA8b3Jw4gf7qU/3aLJEB + + um5vkFOamBAAVdjGu9ni76ECgYBDJJVt8XPjLQ6b0dtiD9NSEbHPAmjqKsxUYSyr + + tTo4HzjgcIlFs799K7Tmq1uP7+iT/6loGhWwACZS71YcSQBVk/HzMCH1O1Ei//Sz + + Uk9qc0ounpq1unNOvsga+DvwJv/llMFWrxIoeSqO/Se66k2H3OabimjJqxrACz3l + + 4UJcrQKBgQDk98mfTuvDdcUPQPK+eYK/RNp0W6jNsLht3s2823K2K2+R5f7a4ug2 + + SjW9v4cT+IVDR5Nz1XZiYWNuTv679v682o7c2SoalWne6RQzickG2s8h6k5D2qSj + + LyRqPtyr/3ty3pRT5ki10yvLvNbPusfrUMHYvRv8slJt+1NsGo7svQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:pz3mga5pvqd4bpsz7pbyna2qtq:w3ptt7xwwgywod3u2rpgx7iggvm2kpwl7d2ryr3u7mcaxgqotlaq:2:3:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:gzcs2in25goucrttjikx67zehu:sbnsmodidyov64f53aqpdkunrpx6siqw6v23h7vs375ftre3i5hq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAsy9CIECvk/doQ4KfrSYIwRNZxr2JmOvfdTA7fJr91c7znNob + + 42FTrDmG41G/Kxfx7S3hF6YBbmT+Nu/LDs9aSO3mPoKjiLldKL4rqp3VXLGp8pnH + + EDq8oYLSu/mRaR0yjtrVqUsj8nhtwxGg4kMbORdNe9J4XtCCxQvMy4h89qiLp8uj + + 5fLGIFOkfYlaUQbw6pFxT0THVGHyRx5Mzzrdivdjeo8RFJsqJoZdrQyEEAXKkeAZ + + +njTxR1jrUQAx+RxtZygV5X0urUvSt1cVI7fAhbfID2MfszqHa8JAXu4DxnkBCNY + + ukf8Y7tt0VmfM4zWb7wmubQ3FzKmp1vZ3QprGwIDAQABAoIBABSlKkpLCa/Tvrig + + kUNC8ZlFYH+skPEEpE99Si1WMk7zNFBrNPFi4mAilK8WWR9e9+nq8ldmMh4FFuE/ + + ibbgHzft6SxkovD64ofyOVfELbQraDhijXQKQHefeiZcX+uriIq7HgkOdkrWo1bp + + bg8DylwumifdHS9XeOm5LVR6GmPU4D9I73OuxyiQZGY9OBAoEHa/5QbnqK5Olqa/ + + 3xdA0zsrHHQpJk2C86hR7+qshKBSdj8Z8HvsnMjUrHST/JEv4ptCCi7MdvXtlQB/ + + b79Cs6Zp7AGZH08X5fSnb2BgEB2+c6Sz3gRWBnNcNHXI0mty02G8MX++fTwXBJm3 + + 7bHPrEECgYEA1GkxFGYgHtYL4wyBINP40fwbQRVjp7gQdKP4y6/SCNaIojUTfbGn + + U+GSDtEUchrFqeCEd7bJwZPvTI5mz4LJVtBiikznqk7YPZc1IYIRl/qR0tLjPaE0 + + vLPNbe0hUWaJCfuEGy0J4vOKjXTqNud5qen28dqHp7alw4+jbP3GV2ECgYEA1/SN + + ycHbk0aiT60e7d9ecwz2R9z2ZQLDcIFlPz7Oa89OUqMrae9V2B/yO2Dabc5catGx + + 5Yg7Z5QGahJ5ers95XWy3ed3v9A7GDZwc41HTqdRbwsaM3b/YDcU5lD02HFaUqeT + + LjiEn9mJ4JlH+LbCOESORqxAoZjjYjQC5U2+H/sCgYBKjf1/FnVxvVmAwRPVzPEJ + + 6z45suM+rDmCZ0ddXwIOvhZJMO39cUy1AXi9oJ9XiZQVk0uLpWndeypEKbtmXJaE + + 1TGxL1slCPWXcKpib3/zYyyp3gGK0TlsfoO9cL0AEEhLa6+rxjwxH6BjFEVdLhQj + + Eo7txvFUaaR3JsSK7ewfIQKBgAq9K4vb6wpg2dNyfXZAxFaeT2T1dP9C6useVCWX + + /vXXgkKTwKXs8+zicc5IG7SYLXpWYS1T3/hfoQ4HSykyRHqzpqhoSUktlrK2ilME + + tIYRxffqqmviwAJN2uk1H2fgAyjXEnea8eVtEPEtTintFK1to1GaYUBn9O6+PWKf + + whOfAoGBAKSFBWcsn3qk42K7ZFdurqj8FbipiYNZYXU6AdOWxWqIMzZjEi9VBPNI + + rCun8bXlBFUNtJqLE17n0qzpcr7GJGcy6pqFcE+U1Q3j8uxJEqG/z5ZG4phRxVd9 + + gWP2U/qIZivdIymYn07e8hlpTEZgJcWjkVJ4AdB/PPqfa/m8t8Xx + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:uvvcinwvc2gxig3hpi2os6ajva:yphtwtymxs2t7kslcwgdjmx3xu7wqzknff2m5jte4meilabbmhpa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA8mW7LoF4muvoZ0pfWJW3wsY3VWXLF/4RgeJvrBQy8k7ht5Lp + + 8qM0z9SJ4EgryFgXtG9e9n4AN2dPnbsEpozcxrhYLrQZPG1F9FwcppKPZqqGoBYw + + D1qeUHTqrOvtG5xHmoTCD2kySrzn2JA4pbAXvVn5EH077LgayDX9jaZGofUsx92d + + THw9argVEYhVGv2NtAGvMLgyXBSaH6SZe5X5r5YduLE7d/maZ0e6i7tktjLAyZmu + + eDw5QE6AVfy8/2bf4hCbMACnuhMSu2Mb29zgIn1iOgr9sgxRcnaKRiTl5AD+Dc+q + + MqekwTQP9KfgV+JM/x2vMxL7IO2YZbdc6f5Q6wIDAQABAoIBAEY45pNAetoWwcs6 + + poiZRxUsK1eYF9ApkJTaLpPhfijoZUezTgc29NPItPC+t8BglO123kH2msVyLoR5 + + a418fXEsco+FKVJyLbPvA3XWO6j4eeviwaWRERAp7tqNtrErAytmjnm8dg9kzp3U + + mjSV4Sq/6AG45iVb6JZb3cqtgwTj2+7JJIzk7MsG1NsL4CH3bQTkcfK1XHX85WD7 + + vkmN1D5CigOJSxeyltPpMibCpuZmyUbauVYN0X/0hPCWeEy0u5cnyDL6eKqfnF5U + + OhWnrghTqWcVStXbDwlXp8g0kO3hwu3GIMrcJPjQjCJn7Nfq+c/IiFEuiwdQSPof + + NdmBYgECgYEA9epQwTVK3JUYgFDmmR+PjYTAR1TNL5KOqt8tqsUXEcZWNYa4Xyfw + + 6EJdvSRaZCJJd6luO82QsqhQu8t8/pD6vM6qs5gNwnQ27bYHdy23gmP1iXyHTW1i + + a7nq709lDardbJsriSvk/YMCH24SFRgyozW/3vrZl4Nii9daPlxXDIECgYEA/FZ7 + + 2jPP7EF4bRy98/7HkpXfgNeV6dntjR6h7Zb4Lija1IIS+7459Ttgni7fKNpF5T5t + + TKHj3cgnjg1hBCcba4nK7sGvX9noBhcfEbzD8BGDUd35PWY2W4/zR3mkx/ueCtxP + + vapwWf7vuOEj6+GZlKk3hL3/PrL9ym1MpIs8l2sCgYBRmf5QDpIX3jWyJqZOe2WU + + TU/Mm7w2pAhJdSNfPmVoVYs32cuGb+eF+rfGUrDX93Svi35zw8PXNPkNR/njM1Kw + + oleMntE6DHxJpxSVHIt/bhIFHFh9feWh36Cw5oSe42r0Zg0tSG6FHRrwOQMxEsWC + + 2QwhPtZDa6qgwsZEWTndgQKBgQCs8cU+/uXRoemctudFtGgqAkhF8PwRY8iZQNZw + + lVkRofShU2kZWv40IncM00klobvn64pTzFz1Yzog9PB6PSdg4/bO/rZo9ls82Vn0 + + +TA9eHNNh9pMB6LXzGhLo4aZfc2K2gZZEtigBcddKglJoLx3FCc19lZbLagdth2i + + ZL+pcwKBgQDxoY2CkBAuOcyY29WmyBWUEO13odEzC3uUuvLu4mqxRYXvEIR6OMy7 + + BgPMOFSgqsA+qUTzahSAcXgNauS9oks9F6uAfDNVVuBNok1eBK2XwaoepxRFL1TN + + YBqj+On0RnnKTqRBNSFjmtopTDDtZUzu4qzpLzBgDP8Zn+dLSrgoMg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:rsh7ysvsgbwh5g3xuj6z7zky3y:ykg5rhzpzqkvdy53qqyghfbcusibynfylggbhypo3iibsrrzvlkq:2:3:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:qidwnh4eshzips6trdeog3tczi:wqxqxiacoq4zlm34kw5y36u6n5qnwusscm54fqu32cwk4v2df5uq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAtbn+aJL00xu3hzUW76iOnI1++uKgSaLljxTqKEyuMdLq5ba7 + + zavatvLxnDiscV7FKTRQOh9c2NEnANA0CDI9MdrCDFM/SQvvU2X2s71F1T6HrgWg + + 6bII/Tzu3YdbOatvk1nbSKWnDTuBQMqdLKojT+58lYe6/n7kgo7atmxSOuRG8bZN + + sLBE0Lab2EI7jYyO2fKr3PmXxfCMqFvIVA7AjTfATs0ekFIMO5Xus2w/Sgz+plCU + + 6hC1S9hGMMLWtWGTOIwwlG5hDknJ7xY44F4o9M5S2fDHkdXChGDSpsd9dQotFMZx + + Gc7iCNHBf40yYZPKrdZqaTnonDUtsyZsoSPj5wIDAQABAoIBADWxsv3rDfOiaOPG + + R/Sf9SNEm5Q9iea3/uP75gPqRD3seANPrsXiVUlhFwp1pF4LBm5aSqohwik+Ayw2 + + WGljjrlATb2ei0BmCly17+LDtfJ/+07r0tO6CvXoHxvNdqLfiKQdFLGuYGGEh3hB + + ZZdg3fYsHRuBczrm+1WoJ+9mqhVEBM6fx+JI/KDHkDu1aKWEeP2Cl7Eol/ZglY6E + + NEodDfhGOdAaXKCAYR7IHq7LBqHLCK6moWXrM/CQs6E4Fh5mal5n7jeRzutg7ZPD + + /tWJTWRPWVd2oBYnKeGkgWJ4ADGddtLKbaumxZ1jPu19fKIoU5Sw2xn10vVk+/KQ + + YKP7SSECgYEAuR7MpUtt4/jsoJrvf0idHvRVieBTxYVQ5nBfsHghDWtag4X2OkGM + + dX3QU/q4KMbsHB11xg8dPp9VJEH6wnqYLp+TAjTwetZE05SzcyacfaOZCLZSAhew + + P1T/uIvcg4OYuJyYvaciIi7q4frBANGIC8u5JQHgbyDZCayeMf/YRPUCgYEA+06K + + ztAsqIbuMSKztzTzQ6ljGxANMKjmJDHTwqLZ+UnknP+R0ZpGBFK5Gt46EjfNkEgH + + 6liyE8nM2NMuXGFUkTgCzCAjpnsTR9Wh02bWGH8ZgUHr/Apq5IeN59QJxWkKHlJn + + jCEgHtMRmOl6kbTJMpMoAkJ6kPi+N+o8dczD2+sCgYEAh5Nb807by1NaEYGHF2QZ + + 1jrBjrmhAI7TogD4w6gnJMnTv3FT1HR/JukesvJy/0I4V5rnz0bwdxV/6I791IKu + + g67QnpQg7wWP4JkOF65We9ld0bidNPUeWjOpGQItXI/7QHFHl9YYtIpB8YCQ60WJ + + aoIoNUc7lIetDF3Eef/S5yUCgYEAwmbSuAOP2Fpwne/zSBEc8cVx1fiHy5GMXolw + + /4rMxawkvlJxccw+x49ag+9OytMCIM+n19/++ZHM9hn/LhVYvvGuMEvYaCujEZmw + + EoHlspN3nmbpb1J7uAcofiKn4F9OJYCne14Qo+exIDHU0CwizA3MEFtuxwC03TpE + + xPe+tzsCgYA2lWPwtLMK2u7mstYsYZs+g2KHlZzKf7mBtZzmmL4IkhvU38wuKMuw + + xIlmsOIHjkXsfPT0tBKD4mAngPVPN7Z9sgJGCuWqxXoXxQltlBSH3WzQEGvipt/T + + i7pJItBHrPl1Mw5m2baRRIPQMREtRqwHR8VRlXy4vCVg9Wky1RGCHg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:qxw7uvecwrhqibsdufbzs72voe:6goxtexixkeemwwpf6xu5is2723hkpzvxtoy3d7772h77jn63ewq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAyGa9FcNFgZ+FZa375YVsROi+KaCNNfZDjSW4xOhvrAO2ch2Z + + cY0mQ9iAcDMIE1NtJs95HqLGbBzkRF3+XxLN03aqRaTai+wAao2xZXiLstZJV2tc + + GIFmoKx1pGlhHpk3sysQMJTIgg49HsGxf6KW9TFLMkeNA5kvE0tSJghQ7G3SSKm5 + + HTq5ZFF6Hh/i2zy3G1hzwvB/kzGmQb0Aj33C9IbjbtiI8wz79+TBecEMILwUHg5r + + NdwP+9+i/ZoMbQ1RW5Vzfvcb7w+/yp0GtvZO/6yUihI6qM5ZZ9q83O575/HY8R6t + + LKgSw7A81WVL13vwDHZtcOwlGg7ElAITsRRgRwIDAQABAoIBAFTWjajnbIb2IfKM + + R84AgHfhshOMWQulsC5ScFjH7/K59aR03G9ianchcipNqFcKI/Tgs21hSrAdQROi + + WRwlqUYi/+2Q30aKCBkT2CxVboqsxgrAtBHZwjk2GW2bgRaDlb1/dxCiBApu/bgG + + Ft8qVU8C6csk2FFUKcY4xlO8hIm6KpnYoHJXmtxPctJTYmRS0zuvfV95trfooFdk + + z/0rHorBq0xMEQR4CiJgrNyvdVPXnlljpmjvFOPCBwbGjY5MfmnYfS7dKYdmyKTF + + 4yndMKCtEwC917ncUo9NZ3dwsaG+uxaK0F8gx3STP0daE1Ct8hSiydCgdNDl97E+ + + uJJUbzECgYEA5DpKwzgXb4xrTq/03DhzX2X4uSIh9/kxHW17BwmOQ++q+lJtM+63 + + ND8tp9w6LiUTe9dWPFebBBrQAmsVpTEw9/rLcinFEJexTto2SjDH7dt7PXgt9dxs + + ki6GoxgRq/AjL8i11gWlz5ydH3/hQnfbQx92Ddcwt9nc4Q9oiSkGWZECgYEA4Mma + + rhAPxqY2kq7jq82HYLywXknqL52pe/GAXn65PTjVREBllKtgY+woZsXzw8L30jer + + jsX920uqpMunrgn7wrvrxXbjtlPFp5JqDK1f2uE3X3o5MLMxD2M4PLHgXAkFh+7u + + NYXJqaz/tiDniiTaf8EFnDkZbFyX15z0k7K08FcCgYEAjv7O9P3iASwz17t7abec + + 4frcGfL+4YWqdkuwN7qO/pXdxLV8YnuBIiUrj+72LQ9h48gJ6gjhwXKjPcCmcTge + + /GCQs9jj9f91QniKZ3Wk7q0DzIHOGiufgv/Pr8RW3im5gij5dT1YpHn2IFRZaPH7 + + 2VSO/SEFD0xbjk+/KaEgr2ECgYAcuAUoGes6EQBF60wxJfgW1uSdl0nxPW5q5Gbn + + K7+U3873gla4ENEm0wQyZTYIm783v18OxaLyQo+RsGdC6AmfTo0H1HGxWLCXATDF + + X90wRLfjXeUyoKIy+hU0Q/GLMKfhPxh2BBrIr86XwUpzrtOvoMSLugvSeV348Rea + + SymszwKBgQDeESijXcYtztiM4LJZtW+lFRbuUDk96VivUNAfWgb76uonN00wzigB + + xQrq4VIkmMv4EAHs4WDzwiR112BAPiY6Sg4YoCaA2VEH0Lj7vlGv92CZ8YNyjNpt + + +zAhdRunSIgpgw0ovhCe9tko6PX8Ui4zdvd94GxQ8FWmRovm5LOBqQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:7xqejfqfej3u3zp2qymqd2iqeq:po4t2tzkh4d34ku6gdhlocadfwdyweiyckyqz57zdi7ndt4ikj3q:2:3:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:nofb42x37o3rgbt665fas5kzie:k3s6wi5ohmsqytd7lsbsagknyg3elwphviakrrsazcsb4l5qgyda + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAtxoNXh81HfkF0TLH3nkvVnHZP3E3SHFzlYTVt/+0hxjqd7H1 + + ML5/AzYtDjsFamK/GM9PJw1whNyqqt5lFwJvFku+qk9XxGpj1JtHgirNnGdhs6Rp + + KCQE3Wx7gQAI04Z+tHmqqYdZsEefsC0n35K1d0P5n3zToi/sNeW8bAXONuRvqNxP + + ocROo60hKIu4NvnnZ4mAxLyNge4DEj9MAOAURqBW7ZoyEjaZ/RJ2XZvXhm3+oKd9 + + FyYcUeRzsSLTE6H5cDsiVi9if+juc8xhd6yA+0Kd6Nyl6FkxKo24tCGQp5s0dDdp + + ZmlVWSu9EzXLL2ibYC3lKRWKTpln8NiczWf5LQIDAQABAoIBAAYvKZNrv2oHPqSN + + sAV6F1i2mK1VYBYgytQae/NufgTwGP848fyW+og7vLLV2H1631RxsA00HYBHSbZi + + s4xe5yycG1D6RA8cvslwAy7IzlABh+G+5FRYPxfRcaxuOV4XlVD4KQT3ztYu3Rxg + + sg+Rj3J7R8OUvjsknjhFzaLiYVAmQTDJDuUofboApGD7iZLwvNRBHM2LjLyjzoDU + + v81XItqMUix/PjeDKc3u42/R/+5P6CV+j5iVqjG7DODKih+jm/lMxzKPfGZM4XZ/ + + 8DIPmoJDxZtpDutB6C2rEH6UE2oQreWG4vYLCuQkittaTzAaLabMRHfQF3E1HgtE + + XkoU9SsCgYEAty2tYRxDGiLviTyPfuLTgHBRxayZBVivzdHGph9aZf32oUsTlmLS + + TiU3IcsMt4x3Pv0Rm1V+Oj3capC3QdGyL8hQ/qmDMC88+tKd1gbxTTliDKULoIQp + + EvN2nrHKi40YjxaxKU5kVD0bIZu8x1VQnk24vnJRZIQu/vlck9gLd6cCgYEA/+SS + + uF7U5OA6ZdRJL2KSGkm+WGxaFoJZbY8z0YeqjU0YbChnpV7aSNM1UvytzU48jO+p + + artSjltckOw2QsQFOnyhgkxPyy0w+ykzyMt8Kacg8ZVkJxFmXf1Z0KsDWFurplMV + + MzTf8eE0ZvjP+2te2uYr6Vmoa0OdNfoJ/mHCIwsCgYEAjzzBmfFOq25sHsVjdBYM + + yx+JYejAU4TxHCGQk7BqsNxxcdjSPUOTLhY90UgE7raBPJkJnoywwvxCknYNRwOh + + sWmTpD+LXS9jIMN3NriBEiDwAfFBcUhHEhGdTSS7vHodnS5iZGlvXMvXnmU4riqR + + euhNsWaVLOOMGEeH0/gZp3sCgYEAq0X5MjA+/KZcT/XjujSWp8O+BH8ZWUGLy7ny + + rAbLD+KPOy1cGiK/pcjAQzheuDDqdEahNZAFtMTP0yxXMR70hO4QSB79tXcc9q7g + + O0B/bX2wniIos8GAq948NF+SUJyi6iNn6Cs2zTW4FkfpJVX7WjZ/I6PgB1NtMUiX + + Uc1q3HsCgYBdqsVcc7xtNsoa6VLWs0UT4ddnesOGNPh2OE+wD7GAZubT8A6Ndktw + + 8P17MAMpFjhW9OunA9Vnat41iHdqgZtyKUjuW87O+1pRp4l9MvKal7Pf6pfQJ3c0 + + FyhWqljYymTn/LFep1x8OzMC/YUxclpLu4gUbHu5bfqdd2mZsxW+Eg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:h4khks5ufaa6ka5lyr4nz4hetu:g3mjwxhi6jswmwppy3upio73yth3jfx6toguraonmjysc2boat6q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEAwSglyEQntPe1VGZwA8UR04afb3YU14LM+yUtPmF86CFqtkYF + + jERO70XwmKJDI9qPskII5G02KMr3L6L8fXvBAgq6YBdJlqNGpxnS6YlzrPIgxLJE + + 2dcxoezU+NQTA/3YSCGukmqBqrLyHOtzlpyU0zo9W3crsUbdM9yCfy8N7+98vLiB + + tGAtjDDMsg7rU+L5nKJRwNSV/eEw85lcmj+6Xj/7JZOLisTI4MAspt3yG3YmapQi + + xpDif7Hgz6d/zKnkys/BAw2e7/iFJyK9hbPDtobtJkUK8UAs0d4fbcrQZKg9CsM8 + + VDgp8bR9oBqfhbDHQfNtZV+82M3qewbgL0BWrQIDAQABAoIBACB0QfDlvrQx4KZH + + Ne/0NzwOxRAhy3uwbweNpg3yrF2Ga9snZbw9J/QdEMFcliJakUVWwg67aNuuypyW + + 6oyc8/+HVOxbTVKBqZffB2iU3zpCTo4uE9J0TVMTK2+Jlo5XovTvr9jLC3Fmcra4 + + Ouol8f2RrgiFu/Ij4Xvaw5RiEBntnRJxUlvU1ik40uDOc0usbkqHTMS3drBSDU8a + + 09317Sta5iS1EDcDDAg2qOwXScy5pzVAhUapN/2HSvckbKJkjL1KuaAq3Jk5y/Pm + + FaHls3slBPsrfeT/MW61PcSgraz3xk/hw1ajeB+swxqQfkhwgAFe3RxJbOwi9uva + + gWdoKRMCgYEA3mDRx3GqV7B1oml6tuPoYwONKmXSIDh4HLDX/qxHtBLHIInNp7vc + + T5ntId4EXvz3DY1PcRqpsMpGLpkMdoeqzE0eS8a5BAK1I15uSZA1sQAjWfu9o72l + + +wjjaqAuBTm2k8E0XJ1osJyvGG3q0zb9lvBmhblV8d+Xst2iEATfXZsCgYEA3lxP + + g0lADCRcCrt8/SlSVxuECrORryRCKISjYInOzVdcsEJO6vqHFcdrJ0UJv3oPvR3b + + 185qXrBJrxCM7frpPTQ0rIjXYgwprTtyVW8nxCLpn1IWNH89MNiHSj9Ag3pTroa2 + + Gbig19hgl6YutX2b00sCT1hI9Db5Thaxs4mChVcCgYEAg2u+rlrLa9VaP+iMYEei + + j9mKdNMF8orM2U/d5qFUIuSyD9XA128bjWOPk+NMvAJN0xF/MH2saVGxVlqW1fnp + + g6HT1L6VmvwqpsNo9EqooHlPax9ufLVYwVoIZHxTljz8XKfi1RUlyLJgfFSBYd/u + + 0GQ0grT8SNx2H3wCCeuHQh8CgYEAuZoVqIEI29mxlie/AVVvbFQEWCZg0O8T5dwo + + vtjobE+ih2EhnFN3U/97enDO3SuWXYXBzhV2hgjhyCWpbK8F5ldgLC+gkC+UzgsT + + uSop6DY4CQssi681NUNXUesP/26o0MGS2E9aui/bGFnXHRh2a9xtVitb4bTNTZf1 + + xeVes8sCgYEAsILzo7kk+SgV6ZqyubbN52t/q/0xyZoNFRhlNtlJyhbCE7YwUY8B + + qmbXrbuJeiuDgopMZ2OHUWh4aLMpBxbYGdAlCz0vPS7a8XamQXizQSD6GZK6+AFX + + tcrIMtrx++XsrD6RkikqaQmgPq320rMJDFETZOzxXMq5Hr9NgKL9Nyo= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:kzhg5zp4hcs75eboack4kqpcdm:g2cwnhpfwxrv3c4lrmpjyj327a274oa5qt4isu4avjixbu7vblrq:2:3:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:smbhexz3nnaz27sp4ycnn53qxq:v63l2vvp3z2brgul3vhlbudiybaoxo6fa6qe7n6cqrmbkbtq3pjq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAnluBaJX/nthl3VTvSPm6f5LZ7ZoP1pXr8dmUZYn8cyyAmnLR + + 5TLc61DWPVjD9A5fiBeF8MTgU7h/RZeb02MaWbXtriqarpvvPqOgsb6P5J8viZ6J + + YocarZ2ZJoBdR5kJ1sNbSf5YAABEZX8KbZWU+vhGyx+rRpjcsM+31ZLxSEg4kmX6 + + W1YyVBfwtkYLhRwaC9s53ZuJUfQa4H5tynbgrYwh21vxw2C8NQgwPLh9mNkCAJar + + x++YD4ipkEidwlHGSaDQ/miYN/fXNbwOBVk/VOsPEyVrPLQa/dfsguOZV5ugIOJK + + fu9bdAQQtstfGeryekVWvvq6fi3bmetXwjiYuQIDAQABAoIBABZ5XBtQtm9/vK01 + + waP0tTAn0j/zTm4g5tRzEal7dNWPqkzBIOLLXikTVuRr9ZtscshotjyeZEvdckqZ + + IqdUeEflFu9R4pQHU2PrawHuzpMeuGtqkYrnK7UaGcMqEpL3uDq/jPQqYajWYN6a + + sgstYHBhzgJD41XomeGKCUgJS677P8X3+g+i0MxHx8fgnVLxURm6QCXeLFzkgqIq + + yt92rNkTNa9wyDdYcvAcx4b5RLOxXrkkklOVc/oJlteM/X07itbuYDZBQDOYpZPP + + EkTckkBSbcoPy6nGfcHDintuIWxKe3jbWRcRl1uCN9JNx9rn89DQzEAfeFMorROs + + 2DSDI7UCgYEAz/eEfIZ7EJ8VZ4CV+4oK6s6+UEKuoTW4kN3tk4BoBuUD/kaeAkMv + + q943rKeDtcOYOS2FxSu8XKX8s7Ad6IJV/l7RMtjRy0ihTsklGUnQYx9ptkBvWYnR + + M6SwLfOS4etG/+4VomUx/YGAsffZjInQbAqiZKhVeX7qFr7YSiBfkTsCgYEAwu65 + + vwTOWT9pazDHER8UC7tM6uxOCEGkHZMcGFlDftLaB30dEVL6pCeXW1J3XrFVFe6x + + IdZdPuTyywtpWfJrlMPGsjHE+R1x3AB1NaLEeVGIjh+Y0Zt8nDNwdK+4u8Kl8B5a + + p22ySmcPpoOPFv75q1MTyrs/C5VaRuyU8SKYXpsCgYEAkGZbzp8N2jerhAdrnJF4 + + DRvqVw5F9Ne5RJVj/bP+BzODN05PLmD6O8r7O13A/TdHfgQWyxYYHvh940JZMfU1 + + wn6RoU2dNhpDLtJJeSqgkALiwtIwvqoL4WDrl6x1g3p6/P+SdATx1gTSmD/xBT03 + + w50KrvuXBdpSreJrieS6lrsCgYBJSTUeIrFtjlCU0xbUUgnYS0ekvsirg/ougEM8 + + yDp+8Mi1rg0CmV7P3m6iD8P/Hs5tW3rOzOfroGnDenvWLDTUDjKiheGXAsHuw2FN + + k+8n6UZcoHZ0v28+znwF8paSSKDYQKE2dyBjppGUubtPGvdEuQwk2Pbf5Pu21HU+ + + nxIH5wKBgQCJbSa6TDgwwZmqOCfMHkBLXH+up9o30VcREGHu8uZyybq5q3va03LB + + Ket2oM88ot04aF0wAOIJqo35FB51Jxgi9GNq1LE1U0TlB0o12dz+yjFGWy0A/o1Q + + aCBedc455WFm1R/BeP5bjaKLM8suSiVUIrHGTTKhtobITgvrmIZOLw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:cplunzl5zzvjzx3hurccgxjaya:ew2dgbe6r2ivhbdn5nmueb3tsr7dziypwpxzqmzowwexv73n4aca + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA5rZ0EoSYGWTYYnRw8LBLb7XKPgyB8kENRSRc8C4zkQjGlxay + + rBEdxXypt5KoQeBXEyfwoALfuuMA7lP11Tn6TnO00AXvMEuvqwspkdIptBddnkGG + + 0hfW6liNrH/cVbwOkz3cdxhf7jL3hTTw4DeJdGepV/ey2K1qHvbd4ckgwjwj2hy2 + + 6PWzVVIXJe1m7crNmB6DG374rYlRgh6QnXBP09zOi7eo1nxGVPbu/jfIwpRGC6W5 + + tZCr+ShQenXofqbZ9po547ErafUaeRsiWMSMyzIT0uLvoKv3RAS93bkfqM1USLR5 + + 7f4Bp2yQcNjlUUnarZ4M+Q+PWTQOZLeX9mLrnQIDAQABAoIBAEdxj58eZVVTx7gx + + U7oM9cdJla/CQslIgLn9CTStMfXDMHAgLMMg58W8lXfN2AHSXVSGxTpfuXWPjz2+ + + TT2y3wLFTOQwOkIL5gHDCqPn31cv9yMnKn9Lt5dJRdH5pDr+acsJ2IgeybIjIUgk + + PUVJnWypHyUpBL6ZcOfWzZ36IQVUcME0PMjykTav39K/uHXWF7Zk1wy8FFdtsh+7 + + gpq6hsKzZG68vbwySml1V+0utsiNArOTiudzUEY3NHrrjAYgKgFxX2C8tSUzWTEd + + Z2Yl/AMnfL2/jtQjjWoNGaG3WZdkPIBfrgvF45uy0QJ/Rm3K25E+EyQNkz2CdFi3 + + vMKui0cCgYEA7qtx0wbCw7wPML86BIp2y2tIo8kmGeKn2NiCsCZl1bW4lkfuRmdN + + BYTHqTUaB4PaHijsXrLcxuGqjGQ7/OUqwmEz2BOZZT0ehFAkkSeA/418ZoqwbH7K + + AylmDTtZ9JF0hXDVF7Wwwx3RG4O0OYROie6Y8RXvdKE0DFkcoiywzN8CgYEA93cZ + + Q9m6+OrbA+KsThqC/vimTGPPWUVATF/yPgwSBT5pwq+JEjIhmmpaVTMs1E7h3/ob + + mHegt+g51fJwc9M0h6DcjGJ0ek7Qlv/TrQtHCzljqQporuUgqIfaU+82Mxxemwdg + + JqfwT21KCRBvMNRtQwILRCM/S7SEGzVmzobrGwMCgYEAtkJIfu1XyF+RfhlZ9ePD + + Sh5Yb3MJXJUgtlDIpDn+ZFAMcP7nL+5s+/zk+AtsIDcJVyTLNJoETQBB3EojIUHk + + AGJ4U9bLumsNJd+JvStcsErcp/XbOk8sd3Oi0hHz5Pc68zgyEpQWMzpO2GMgOxgV + + XfHN67Vjkj4UYCWg3xufvCMCgYA7nmDi3NjT0VkUlY6nfnGi1erSqpUwz6NPAyqM + + UkIhK0k1ky61yIgZ+JdswViCicKXQF1XnTKGPBd6+N6ouPCF4HZiB/JB6S0Nw/KO + + VRI3nQrqlcxknmUA1UH/SLlJFQOh2+QJTBp0OENG7cOsAvGT3DE0qD0+ku3k1DfB + + d/W6WwKBgQDS8pkBm+pZ0EbZvpYTy804jUtErk2Dp5M6m+KEFE9NF06ncb8voRnQ + + sYg4P6NuweJnNlQSUIneNwQ3liuZTdLz3WDt99+DLlcToB6+jL6ppXs1h0dYpkHW + + WEQ2KDzRt+BEcdPe/sbkF80jhkZRPos5gMmy5rgcDiQ83aA4RYPoNA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:6sf35smixwvpapf2zw7sllxet4:ks5zd3hkd7ppwobhnymezckszexpychngnkipxfvmlcng5fgjbea:2:3:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:lbjianktlydwc7qn5oco6sp2xi:mqnj4jq72xxuwrff2f4kyuv5xvu5yzzkhlgxumm44n3uwvxeelsq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAuLx+Rysw67iIOHq3IvRgaYAn1OT6xugUvhXPc5gvPAS599bS + + rhPVP71CazMQHzCPTx8KcDskNnNb08xoeae5DfNVCs/E7PBtgIy08Xrdv/HEZ4xm + + ksJBLydt2jGvvFTbCHmNuywWguHHtUig1IrYZVCYMWUABGkiZ/j4UqL377jjY1BI + + Fb75Fud/3hiASG07BdL8hzDTLqmhdXDwQAeMklhaB4Qw1A+Ubb1it/SoOI2CUzhZ + + /fqAJcQe3YGbVtJm58VWy4dw/AzcGitya7MxXHXrjitWqnj+CVM0myf3vbvaX+8y + + YQlv5pATfhJbCmh0vj03oiaSZcj9IS2fooV9UwIDAQABAoIBABCL4YuiVLloR9s3 + + MpwQ42nPrsGk2MlkFCeKcJBb+y8XBUkrlqc844bX/tD3O+RvRwbBMwAma/Hslzb7 + + QghTe4HCX8WeIndOeaBf+fz/EkmU8BCORMm0WH5Ou8olVSY7O3sg2A8BvepvKqIU + + JUOkRAmfFGKoNz4t5IUHicZtDmQMNmrsb/jiEslKqcroE+7R4bQHAQtdLCwPgQSW + + AHh+Ft1wh8lGMHXi1EIiahVqTF7EifNJ3Aoy/O9LybXEMYwy+fDN9WtCNa7Xl5Ab + + K8QXgtTLg2kcAWfsBy5aM9vghN19bDV8OPgXYhFqK9AbFz7nGBO9VhLwVHU0NbpD + + VSm88sECgYEA3a4QFEE+2qn2Z30ar2HMrEAh6/w3KSi2SKMfLvnPl2M0B/YqLaTi + + YddrdlDcKJGUEx2GKNmJFUqzFX++BD5RE1olNjw6RW6D4RDpCwoxE089WN6gFiCA + + wdG5RXflHhF4HUfz3lrewelbP6VM1q6Rs2tA0+Zn+KTjPSIGTl9mAdECgYEA1VY6 + + O3K4p2TETW3n+T7+CcLITnSMp8n0hWOAX5ASetShbq99ACDQ0mzcE0/KWyV+2sNx + + JxvwBBgtsGsGsdsqGNyRHXQw9LsY4ZSF1Toda+236OwaMDs7WVVIuFutlD4tKTX3 + + u3UDEsjGWXXohZSE5ajtIjd/IOHtCT5YGaeDEeMCgYArlW5Z3R4TdbkZTbJyauMH + + trA0qmjZ8cQs8c1OuhTDaeCv9AkE4lcT73uUTn+Khly7iWF4JJTcF8yv3GaqhOoB + + yQZp7Ft0jS7mkCGRZxaQ+lJQZ6zHzOojsS0g6Fqml76q2xuqSuli7JNhJwm9Z6MD + + yIF9Z95nN1vqCAd/Xyg6EQKBgG1wsqbUj02wL9PY0evXGNNBDSjSOWXKAJp9FNnx + + OsmwUrBJbkKmkvmfxrZRdGmVrqHjKST6/AHdtXKPNPwAhnQCkp8dgA/L+1OdsZpV + + GcrIRFRE6ppbiHKngYqx3TXzP4+ok9GikVUNklNKXWJJcnOuWRf4iEsCG2tmhCOE + + /4QpAoGAEfdRRaGKv4w0qhxS+RdEaTrDYzEW3xnB56ky+E8UJEy+YgbGlt9Mz1aT + + Kr8SBUp84Qx6EDa+BA60VnkL51E575uNY1/xICufxwM1WTWKnplLHmExSzzYv8me + + hm/J9LA/rmqRTZFd1bqk+M7qAO6bDzKD7WNhAt+kbdaFOlkO+9k= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:khtxspsd2whqf6n3s52i7osu4i:w4z3xljy7asjjjev5zicdzf6xu6xvvr3vkyghu6w7bjitsthx3pq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAtlZxFsekdTXUZFqXRPIXWmfAv4LevgoECO6qfY6ZN4XxMx5J + + ET5EOkkqBE86YqD2nZukuSzaY1I1PA4fHkwiVbdXw8CCEah7foRaxaiW/a3D6AOO + + L2JydZls+CYbimMxmbGFQF449dRtEMzQ5wSmPw+bfHulD6zHYLWgV94qSUWR5pry + + LpVtH1owGid+xQqJncxt1G/WYoIPDfEwHzLhTlwHYCEGLDEHk8UPNC3m0N8Skevc + + MPCPk+/68L7m79SBN806eeH1jkuMIOMYMPX8+5PzT1Z2wE7IgvjzXQ5bNL8fAk+t + + h2wvcClECFXTup9qWyFgu430AOX0eu8ITV1B/QIDAQABAoIBAB4YAT05wQ5pTn8r + + pnjGHg2ZPyo8jse9vnG89l2XqfkMfcUqk/OpG7ik967TZrb9iwZzOEopuXeYC1o4 + + mHE3LpmIE4+m17DTZmJ4tMSXsSf4RHOoFpEChhKbumzwWS5LddXAg1Ye1vbX0xJp + + Q3dFgKy6xjZS7+i44wU2pNqru73w2ct6ELmNp+2hZIaQQmOwRwXQeQFLi+Yyt2In + + g8tGnKaGTGHkNCxWIyMLc5KFgxPpxtFu7grJdkfsGQ40ykMPHQjSepAa7tDAvW1w + + rQX9MVkqvKFQUZCcSi2LUwWXZWnaMId5FPvWHSdy8SS3KWyD55Pg5K0MA1Jvp+iG + + I9LlFdECgYEA/Xt8lCn5mscVw3mF9s7c59hyIT3NMj6JSWKNbYVRlpcic1M+aOjJ + + 88TEZxukiZd+J12sd41J2krsvVWkfANMwzdIqnaxG+1/l9pqfFgo9skikirUd8RD + + SJSoUDqKzB5yRkD1eyk8vEBxioUbeXi+Km22A0wJ+BcY6/J9uufvhZUCgYEAuCYP + + Xn0RRbSZPr+8N6WlPiDdB/hJULTlsbV/hf5TzBRMeqOD6DerBASeikBwJN+cbOKr + + 69XBWy+DhO7CgV1GBuxaTo7RTl0nToDnYrWjOy4fHapNOGRQ07TEbdx1vKo4S1N2 + + FwipDdQiQw2For8xFwj4F0ZLR5pxtDaNPtb/4MkCgYBOS51QWqLJpyLWzSuO75iW + + WGnwUJmYIm7fZvyOTrbD0A0JGDZXy0fN7wJHYudwxIVn/WwvRUoBjlEPrmtvDsng + + JqxgUucj3DkkG4f2vnhwufHeujIEiG/L9HcEyQBkSic8AgaRM0yaTUGE6tZwr9X1 + + XwvwesU9h0zgXHdviwKV/QKBgFoLUkyTv1RkYOLMAo77Une0vh/diowKSJ7C7x5o + + JDWQX21Ac4mjXt5SG+viYnPFW8nqdMKW/TtHWnov/bAgGdPc0rPDJhm5dzTt1zbv + + NmgDv3dUBPpkIxnCNKK7wF6GpYw/vWi59WArsK00+XmBH9Hxss4+syTKIntKiXqG + + ywvxAoGAILJ2oWur4lXGipG+Mk9dceCSUNzF1+8eHBL6wcC+iNeEJx9vj6T7Sgv9 + + MlQYizRaU7AmTOa3jFqbDv/tO23apagwjQtIJVMj8DWQbp5p+HM5dU7kFwGQRscW + + iMVPpVMHqS4F4L7j3oQ07Td7xsLob0mM0FxVlgK1pVUTkcpQoRE= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:yjow3adqfodddphsctxenji5ya:cgqbbbawmgeeacol6umzjofyxzqeegjnl2s3utqjchh7vabkmeja:2:3:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:ymk5gokxdb3hzszs2nuhn6sqvu:kigmqblfazd6wpwi52p2t4lzb563naw7hrm5r2dtfmxheedra2qq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEArVHLgrQL5qjt1rxV30gfK7+AFv0fYYTcddOFF1g+03o751vD + + PTkhlPNGkK5w1gveH5nTq1FnZyH3qLQtWyxvY1pnDARDs2xuTbIQbbojeLjzgk5P + + 96nBujrI+TatjbDI4vuW+3tRQ/WJiE8dEV49r0F147kBgNC3al01TsFQZP7DR6Yw + + Cqkp2WYbfEj6NtrsVJIHykzDifzZ22pcm3SWFYk3N1VeWIBw1OSRh/0GtnoqiWdo + + yztfATT1d14uubxHIXL44hz+M8EnOZ0hwevJoFHwnUWzWP1LjrHxPhUwteTg/MCg + + nzJcVHWDVnxpq8G4+WTlQrstvTIqB0L37pA8aQIDAQABAoIBAANBotXlKsa+Acn5 + + ETv4D5iI0+VFWDjtgB7j8dTgdD27nDMv8YPNoP3lcZFNAGhlIgVB+fd2uL9NT2k8 + + tBAfI5tK8DNfmSNeiYFYM8rRUSf21vcUdZgs+QDWEz9AxxNUcPx4HFFunbZDKhRa + + OCztXQdVRDEadsFu1SNgdkdGhot/M0vQrl/0He9DomctxnvnnBKXgZo1PLHpsmdx + + s9pWv3rHT/k62FQ/d3TDfmSxc43K3OZRfyER5D70eOlpomJJdJURUNOTmTBpPlLk + + F8mzaB85ojihNtCcQjQvEskktQhk+Ejbik6YAXv9+jSf4ncchymG6LYX+S/G7yL/ + + ScmmJgkCgYEAyaMVMCAT+lLom01LjJoMPxXFFZV6CVTZGuDwxhkt5URZjXWLIL51 + + ZdhdBhoBd8hGm0Lkb9yZ8kXwpt7FhZLjt1up0yKMRhCw7r+zbhb5o4AZ4+JwzGcw + + DSyp+DzinJgun0Xup0eUIo2ov4TaPYfz+OUxjj9yUtnWI7KOlziupOcCgYEA3Aw/ + + C7RJZJm1AtsZFI6mfI3A2ObA7+KW2/yIJhfXtRLbpt9H6CIxotj8+mlw52C9U241 + + VLVQWHVC8t1eWeMaN6afCLu8FNxJLBzS1GvFjjlbXrplBric1yuSX82aogZJltoz + + TvicIWICOYGkBl8O1j51rmbMQwfs88W3Zwermi8CgYEAwcEq9/6rE8ydZbZFlYrl + + n60Mn+vtw4+7uz9RPhot5vPh1bOQiFtbtgzNfrJ4nKBfcIw7tF3XtF2OnNrOFMeM + + d8HmE1NMVXtueUzOX0hGg9zxg/AwkcnJ+67ieP4Qh4cYrcXmSOnYJ8fV0osXpy6/ + + uniKQPUopwJZ6h2HNTqrXxsCgYACsVusJv6m7oKakFfUOpKq/4kWnmxKAznZY1O/ + + M5d+LcbmWeElZBW7anBeGCA7lKF8feLFMJrVGkpBcpgO/Yp6l91mW/XHQ5LZqVij + + JNZ8EROfKyTFWkkBERVverKjvPP1lqH+G2i9t9dTINUDBvLFiGokQjnJsDUkHo1K + + A3wEHQKBgF/7DAw9FaDTbdBS+FhWErCYHHZF1ZQxUmcb38VuSCvf8fkmnEpN0hOV + + niDZyim8rB+ggGf1symleU3LqU6et1oaP22ORbiAG9uliHaKsDU5xC5YHY/LGI4/ + + xQe/x0dlLCDV+ZIdmNdXeG9AiUntkxkCzS+xLZDXuQxDgWn2YN+2 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:6rqx6odplnpm3q6mlfvyymo3ku:3t3xbyqbuz6ykrfnjmdccldcobpsx3giwhz4nsyeeiswb5tlf6lq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAqzmFksZy6jN3ReJ5UycelXqDDZkZZ2F2S/wp1LNMo6Tepcw7 + + g8X9/kNE0+5RTY61VFHSibeYwyV+LCJMAhIH4eDKz9puD1zSCgRF62/qofsqgu0p + + v4zvAoccEOfp1zIXIJ5YqvgsOLR3JLxlCQmbXOrhasa7OE6qzpedghx9FocQyPMH + + erzwWXknLxnoF8guH6EAsnBCPOP+Y8CSCgmnWgCE0XgF6cBFKGh/cWicM9lqZS6W + + 4sPRYYqXDzyYArYqHCSJ8iqxzx2/O1rIgo8Di0xZ8IC41V/Har/y4oBZjMDkaHo4 + + ov/gCsVr80Tu0maK5/NaUT2XGZXqra4FG7fqNwIDAQABAoIBAAjmuaHyvSCdwlKY + + vnPrMbTVpKB9WAu+zlaO6mHLXG2ZcZWu810bWuPv/VEDL6jXhWe3xTkxmThz54ZF + + 1iu5Yj2E4SZDFbuouKaaqEPgEpOPKhuaVrRFkFtSSMw8MjTkvr0MXlGtCyd7gkIf + + pST+IdyHvWY+pJb9x/Vrfl24O2yDTT6TfyhyMXqUIgCo+1Ntn25V4lFrn92AJPRU + + lfrBLf0dCMSiOJHfdyllN2UQkD/juqos6QBlRPi8BVAq97a79EvYMBD92Z7T1Hkk + + 8BKggbHmmoMlvJfPWdSrncMujLnPcEia/9fIxUSc5rJHR6o/l3hsLEwg0SLxS/Lq + + 9YlkMnECgYEAzBhyN9KtPRiNFhkU36SKCfYgkTm55A5RNi/vnRYuRBnZ2ReORy4G + + /16yBxTy6RpxbddYC6XN9Ame5NJX2sv55LUWGVWheJDWpCrTT4dGHbkb2enKFPZ5 + + 9d2UPior+xO3F/sP0uNC8LDKrWgB7Ji86Ed8xitO/LovvTUfRtBMI68CgYEA1sUJ + + IlBsIJk9eWUkhHl7sObBFNScuVEPx6QIr9+1KTiPbI8VnHZxSVR3hONpzdCZAsw8 + + WDILeii71C/MU+QIKN1dV81Oy1aqCq+kwrnes5jpKWjAbYD6SJIYqcPNbPKZ++mG + + UM0kUqgv2Dpp3Co9YWecBOjpBdcQTSnkvmsmW/kCgYA2V8QBzRzHicP3QFJogf0n + + Tdu6D27JpG5HSVg5sXA8Pc3dmgIOPdkrIeGxNQjAvIO7RX1yDIHcGruuHbu6zFkL + + ZpQtxrkpyxb7u1Nsd45Z17Hswe1Gy6IJrygLrVrsjYFQ5059TnnCcLBmn6zzfG/A + + QVidw2ZSsJiJfp2HU2sSjQKBgC5J508TAEsCXCKG7xjySft1sJW5wVGbrAf+TbUC + + RTxuKVNff2vqhz4jy2LD1PD8DY5x0Gu91YVttBXme2Z1VmDgXRbodBwVQK7u7lbd + + 0qboxRAcuKShUNBFVLV6MxNRMmj+CuntXO/HuhAjft9p5zLQLutL+7U7hhLrfZag + + 53KZAoGACJa7CP/07PoJg90wbxAqLxxQhxTNB226nSFhhQI04CqTMJGJm7i0okhR + + qjTG/lfoWNB5K7y0nLhS91cOaLKw2SM7Z9Ws/fMdC7WtNTsbHyjqXPFyrwMsnjKe + + eih8ic/0hKnIkV1SOjU+rgi4fVeFISzZ2qtjuc+CYRbXPKayMhI= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:dnmjqjku5vyrkeaulae4bt6juu:d47airwaqedeji2omacwsp6yfqp5mpurj776gmzvq43c6dovtdca:2:3:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:cqstfgln3ty443es7iodypwzky:bbaqquydugrdq7yuoxb44oathv6x342yp6o2j3eofdqac6rycdfa + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAy8EGzJwnWVqWP6vX67QnnsvA1zli+zGdsr3x7TQOjyQDo0cb + + 2q8WgMqjZxIr+74v11UVbv2T/1rncbdQo3EVmkGM7ZdHIL+kbQMRGVQyZMIHIqpf + + FNA0mGKkLPUUVm7KL9NhC1fs7FZSs8n18Xm7SBpZj5DgihoFvJ1I9ulhUhLrme9l + + EEeYUl+MFZ8g959r2dzXoszOllains88+DzAM+X0dg/muYVwQVmSl80GIy+DNyjz + + Y05f+vmcje1LhdwGxndRJ4QHfgO0O7NdFLeD130ZnuQMo8Et+PHQRvWbJyMDTfTg + + zWqJVxELEVR0ylZThQA+Ubs6xlU50kliJXSICwIDAQABAoIBAAPKeEPqS9kfvwKO + + 7JotZJH8cdQPSfDT1X6ehhfHC4D3nJG3IE+LSRHls0XsUqErwrFw8HsmK1C+8jtt + + Zl9Zb/DKHhh1jhSP5uaYU1hzS+oP/239BCkw+SmJ/EqnLKpcWVVWdiHDOwc9UUCY + + a1kDeMvjTEidhhqhAqZQZCvOinRVGUcIm5jYGDfeB7WS762NEwA6r5Dlm9S+HkYr + + iAoR0bOkQuGDDL9W/7itJLizj8lK3Xuy8XUI1yHVfKCRDqpYES7mCAYWsGj+EPxh + + 3OwVyRvQvjtdyDpshSHDLuP8ggIEocQzkW21XpIbWsuojBLak/I2EHYd2lSB6nit + + kxdNwwECgYEA72Q78fCx0yIJ4vhcqUkWUxdnw5hLQB7J3+29OUVVUT6byabMZLPU + + SJ6Yy8hAy0OR5GR1giplB74KWDceX3wH7OULwuaEj2ImiIqXplkVAFe7mh28Rwh5 + + jv5phhggBfvjZLub/LGkoGkBFu3E1ZBa5gwy7L10gE27HWRYgfheIUsCgYEA2ePY + + IPAPmT9CS0eIv4XJgXYZ3NdzjAOHFpyJOPhbg6WEJNayTrZiRTys40GzmSwKffPI + + nVEQOHbAR/eOjvIpBT4adgOuvkycylIIQ7DZRShOtwxrdg/a9bLxaHNDvPL8wqXx + + QMdYZZxWTsPSTXiwzBBiYerZmaSj19xdielxvEECgYEAj//dRzWf4f7xr4PySSpb + + sXO8yR1M9q8OhBK/5jlcjth4YZ5iCJlbsqskAkDdKOfmVFpRjRDvYO7hzhqpvIoh + + QlCs+Hotdwp1X2Duw/OF/ITJpnUIkjn41RkYZL8SVEcmi6uGs0QwYQWI0EAKTOTe + + qM7huyJjd+JKEe4Qh23dQW0CgYEAkKMepT62HBRR/YbOz9QPn1C2elLK8PamhewD + + az3yAcGtpoaedoG7Whqc6X6DqfoCPPnHAib9jX3Gxf8fMuStNj2zcwOey9QvgF5T + + /hs3HyFSn1AvRX/g6ZiPh7Z8EMF75/of29B4bXsKD98Niz/CnLODm1w6djNET9aI + + gTPlvAECgYBSUMCKSAZvVLMQghSrmVUFas74O6/9eOz2/T3YyG0hgr2RehxZ5iBx + + c8GPRbhAvd48ba8DS/hqTeFRX7+H8RT+hroM+dv1NT4blEuGJDClo+ioC4cJZTI8 + + thRcwEKwbjeyXjg0JZ/z6oAH77Fhg44r8nC0zDwonRkQegf+iJVaNQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:nyipqmlsbqj5k2vi2jbi7m2ymy:dsdawym74j7fgry32phhntgqsyc2k7wgf6hbs737dsrrriu6px3a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAuzWxE9RCah2cgZfL7Ki09SgQ6djyb/xW4AuE3a7LjthXWmFp + + TL5LBTkGD6G1KYBw4BKgrj4xl8qpMheIvLP1rV2wCcfx8z+jr77YLrh4VoPINNND + + BX2+GlwSSYU8R6pWFnh7BR/RSMNQ9sXtTDRxnJ6xshIOAukOvREFRZGaO/sjLlL9 + + rg8R3oPvlSXtn7fdAXnxwoNnMeX9XEHoxM67MJ3kmBWb74kdVYcD3CimBqUQqkDs + + ZFWmlhVGhtvB38NDlBH3G8KG1ebN9icONcrRTYB8y50FieochydTSBqD7jx2I8ca + + LMl98BfCVsGav3yeBXetiWC/6FdyvWOjass/cwIDAQABAoIBAAzSVhDmGjBbW9My + + WsiYG2CpAFOLxLrvvOF2WIC4Tn+3iHALuOMFK20tpSEf8aDoh5KJJBEa+FmNiz3/ + + h6Fo79wSTRK2a3c99g980iCNCMzgFK+tgmsXXBRBFw2K/wBnhaLfWImWzsYdfmeQ + + UbrE4r0Xz1LDUstXO+euCT7lBHu0DuLrAFaA0Js8aklPm+eeOXyU+j/jqCOZVWRh + + dODy0KpHS2PcTCNzimKnfzC3DNsCedkIhMvqgIoXUkr/xqQ0UmZIVO06yPCfarZ2 + + wbXFip6A3gsux6O5899NKpJ+C3Mr/h6LbNb2p12YGe5xJ78kFR5IkSlkirDzNpJh + + ENybGnECgYEAxQdb6ELI0VyeCGIcJRP1ujtN4+FaslKssvzKU8yglb68ubi1zrLM + + nSGtQG+VexfaqLspch8JpVsY/Mp56d0Els8J1fMjvgbwuoojSKpY3s0Xu65rf7Zk + + /Mw8Ro9lEtCPPnWMYfWNJ6xYQPAzU4pn900BtznycuY6EHkClE2R7CMCgYEA8z38 + + LHX1ry4kNlJxFt68gw9DlzKyBAzLyNXD/lir/JpKeOpmVQ0S3E1orCugkRtfchXp + + UVogQwO6E9HhXYBdn9+19Y1cITeoD9XmuymsYq+pxWrT4ctUjaZiLHsTfsq5F7Xl + + 4xy3Bzqf2YuQ+f560GRaRmOjVpcuJpqFqVrELHECgYEAjHa8nQ7PoAKJX6yiKATc + + 0FHrK6TDRhIOsOPrUma1rUv3u+flJWDu4q7ZlvB1/vV4m4Yi/AsIk2womj+3PnSl + + Cua7Ol5GgvjrsfE9Sla3WM+aNeEZHkloIZlw91TPV+R72qlu1X97jGcf29vim5I2 + + oGWz7W5QXH2ps4ixwAy1FUUCgYEA8tlE5sLSipa/srh2jgXNIfBgZBlKH78Cyj2a + + E1tGQslsZvJnPqzx0p86TQK1qYoxrb5wljcsFJwo8FbP8UESuGZqzYDXpZZipYTC + + esRtho2pKx+v8TPG9DFUvOIYIbOWPjTuEuR9W6tNIq40DVPkHCDE/JfH4NDJU+Nc + + ZSvoxhECgYA1yJCfzoM9MAv4yDu8bLfqS8hUopUHrH+IREbSLverA+zQmh5+5hcF + + W/jOQdK/ow2wmCGSBo3TQla0Y6Zm0mA97QQOyo/N/U2aWWnV4FHa91uhI05vljAP + + /SQ8XCPJD4OYbGIi6lbdwVzSpZVAvPjiQ3nWEAiU5X9tRzBbHv9Gvg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:bfjedwcwjehjzpwjsgwkfk7rja:jpwea2sgz4hfohqab642yj4cmrh64w6nfo7lv3mtacfzicurqkva:2:3:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:cq5nwf6ie35evzc5v2wkaucyti:us5gy5xdddvyhdg5ysritrzcphfquycmpemoviqbfou7heowq35q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAt8fnhPTCcY+kGOiWih61BQKwwcz3MysYGYWkvIvoH9BqiT/3 + + MoSzJsx+qcEatHIHAuxqH8r0nAODgQ4Bl+4xGlU/+Px+l1KmR2qDl8ThwLFQDhYK + + kUtlb1kLgED7NrLLrplw1ElI+wdHwActeOfpDAZlxbZGohyq0L4n5ovS5DxjNEaR + + aFA36mDDYmnSkqSIdEGepVD5iBx5F34JckySpuLVBTEytSLKCp1S4I/uEG19KigT + + 5oeDlgp/xXlkhdF3wM4z8zJjCC9Gla1KATJa/5Js5oX9xMHi4ZNpfZENSR5zDw4w + + c/GLMxc5m/zNK6+lmBiUoEixt7kNaDxnf/XkXQIDAQABAoIBABdw9tmpW4zfGLv5 + + nMwAxy+crH2HvocnCcOlnYHUKZc3PwODJm1p6iz6e/R8lkKqYbUQgSfNfB5TP2iM + + aA0gO2Cju41vbVkxWFa3IhJPcUkiBLdLPe1S690EQ1iIUVKkgyDh3veg4l9sig0X + + DUiE8h+PyFbr3T4LwIjwHEhGkO9+AZujL8/2ikzcqFOwv7AoITQYVM6c1amvkoom + + Ag/p42iyL8ywof1oblSxBUO8kDTFxhbazaVQARwWQHIiX1AGdg5za6sq5OF0QPRd + + ib/hoUNJeRehVFUMoNSYCNdYNHYLHboTFnemNZvPLSBGJ+A8iBJAoPPgO9LSEyyU + + diFMkGkCgYEAv8uKz28ps1feQfDHF920ONHxIK1JnvOTMJzCWUOcXZv/9hVlt0JB + + 7fLB/AJt5GkdbuHx6dLkju6sZGPxgENtgyq07bf448x3ouJ3Xt2RlfFHbo7AFK0e + + cVUkfskr/ZpfCMi0tg8GYvXF68MJj/tWx8/4yMz/zSWNFAlzao6LH9UCgYEA9U2P + + bBjKVEudYXf5AMOJeEIwnVxnmVhUFL1i8Fnulm06HvQxCzFEadvtvwO+1J/JjGYH + + L5vMGjhLvR8YkoCFCv+puFI4zH8cVCvrF09o5+D0E5Xrt8pKB9Uvv2HKbXC674Zi + + SAwpoaaavJCsvHnvAJ+/OuS+KBbZV0ye14rPfmkCgYBMLV3u0eowL2A5tJZ/JjGk + + t84b+nfZSElX74tJxQ7gJ0vcw9bomMpy5g6iN5zKMe3c0qUxB/B7zNRv8zpChYWD + + qXy/Rmj2oYmLCoP7C+n9Mh37DXvBOplyzix2pxRv39aLOJx+Cy2wNInuAENWCrAH + + INVhe/rF0npcUPykgAVGGQKBgDUy5ejWk4Kmh3Is96aPwY+AI1TtRlZ+TnXVANEJ + + X/HlrFYsNTqtK54doTjs0gUAxlAZjHNpwWDqVpqkVMro7nGNMryTsFfBNV6Xy7tZ + + cHHhWm2o9N7+EwIR3PIPfjwv14q8xTHE2X6CSEqewad6djfXbTyTgR3mnqoNJuGt + + 7AQJAoGAYtfnWnH7kqQbesu1b0adJZZsIZhestP6CVxk1EmsPjO9RUBjl90f9arb + + H5MnbPNIkOKgLLojpyholHKlBRAeO+B7gh6zF+PuBeNp9oADegovCZOhOlcG7jn7 + + VOaPPT/jxE2ah9k5mdZJQNt1tCLbAB9Mw1Emb5Ku1lhewvWqWog= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:eo7strdhhosajkhzp7x5lqukue:fmqoufvqqrgeg5nxxzvvypblc2c7r7tqx2xn5l4gzw7uyuitqhyq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA52AqcL8qR3Pk9UWi2qJWey4+VnwOLBN0MA/3tN/VxWszA+D6 + + kCV5Gr1eepPAHYELRdepXeyGEg6x80gFlJ8r+wrVGf6RA3FffB4NmbA3ZLjqStQ/ + + LYptnXoJT27VqboqLXgXUZemGuuW/jN+NfMJhmi6PDpKLhCH8smVer/w2hsVT6Y0 + + ltVxkmvQMLA7DHqrgaqR2CADWYloyx1R1n7uSf93TK7Y8R5U3FihsXimfQ2o/DnM + + o5nB0u9QddlplGFeDksVbYSR5TSp79OrLi6MTF+2o2A8PoM9gXy+0lhl09At+V19 + + +r/VzrjkRXzNSz7HrSguoU2Ys7aY2fbwhlyPCwIDAQABAoIBAB5t+tbuMADKtgt9 + + 7OT6jGDR8aKNLo35waz1L1DrTqGSr4MXP8zdE3gtUfN8DWcJSt1qIh0MrOCgwc2V + + pMo+7tlVkODve8yV81wPAHSR2jnVygEtDeFkPyCtZUkRnL8gO/N+mPktoSERkpT8 + + WmEnsBKBy9snmAxGjKKlLr1rPfa+cMDADzUC3vFwO1f+3RRM7PrMT23GsBuV8cbK + + uiTXWMMjNNbndNVVDFG9T8TLIAC6BKzzkXSWfT6oON1nkn4UZW7WVAuIikoBNb9Q + + +nkYMkwJ2BmCaMnKjMshBU3MuZFWrzF+T6LbhpeKRfm3DGpDh42peU+qQi/rFI18 + + ZxMUhs0CgYEA729qc5i5/6ENSPqThf0RMsV6FO1g8ygn/2ZZMy6Sz3Jxp8pv9t8a + + z2YcmxBiLLYj4mVSEk9zobL64Y28W0eFP3xd9MqVe/l+HuRFOrR/iJaz9T9HrFyR + + cYeekAL8z0VmQ6kA0Qd89ILC9h2UNN+RszYP7m0XuLI/PJ5CvvmJTLUCgYEA92IC + + OUzkdF/GA4dyor1T1z4nSKKg1LFzY9Zg0gtkYLR6Sud+TFAkc1hvbv3J3gxBTF6n + + V9/UoVc4TMf5Qk67/Lu+KdVGZxVBVuilUg3brvXG4ON5dBncpuTH1GecRsMTkqP0 + + v0BIG+Z4djzJr/go4VLpsJ+94ulEQplc9tJDhL8CgYBkFuslD38RQT3QeA8bP8Lk + + unBiNykD/JFbzmkTYDC2z1x7i8BqLrGCaWkj2SFxF2LAzSIVzWjE+5CsoRdQAQHO + + nCqaneUHQjBasYnPFI0LiBQKPT20661RDCRYhycvbg9l0UwqFTtC6zacs5i00ZCS + + ndLjFG+KIdkVegLk2mNu0QKBgB7vB34oykxvCXC5iDEnYYuBvyHLDDdsdRRf4z2A + + pS2eg8hICDf8sYIm5dBINezpNWUaVOydFZaTNHwNaXLMK5+fzlimzaXoN4Jplvqa + + twS6wQKwDyjgbwIDi6VYy2bhz9m/XMRpglrSx+9pDINPkbUTTBuE7haouptlWAWZ + + J047AoGBAK7a1AGzFE18nbWjTKeTQI1GWVb1A+8nUQMkyntaRBbTbKp0w9ECngQD + + 9HMeoTvl58e2VAjkQq+cLxMRgAb1bvNN2BCcO15RtUq1XrVbSIxYPwoZgIbKSwc7 + + LIRZ508gOcjxs64Ajkn8r6mmk+nYyjhuoRUFplDW2pc+A46X9Xq2 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 2 + segmentSize: 131072 + total: 3 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:hah7mxwfpqemm7icdh3hwsa5fa:6epvxt2uxh42obpnfn4wkrplqml7voh7aqpnqnapu7ffcyn2hk3q:3:10:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:zphopulx653rikxed247gbiryu:on4kfty6f4pskitmrm6zbbqufh7fcnqoklpozwm4mlhxnmc6guoa + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA14mWsmxQm2A5nZu2dQ7rdAaZgb9ohE1EcCIjycMMU3wH36UL + + DhhwebvfmqkQEaiwomYzisZZER3IECSwqbLegy6tAoqrj+aQLszjcSWVi25FzzgN + + IGMtej2PgXfoJO7G2rYLvo44rCYUmBFU2+jKcV+1UF7r3wCTzhxzp1o2aQFBPBg9 + + moMvlX6nPshjoXUTVWjlomiKefoO1pT2FR8cKSfgKSeuyNGXR7RzrdP7Tj2hNhf6 + + AsLbBY8RVsqD/Xec/pOm0RtlHdgXmbcSON0hL9TczYH7YLU+4E7tGR5gXFUj2zy9 + + zwEk7vJlMgYGs5OdoZhNcr2T3BNnOLnuc6DOQwIDAQABAoIBAANtReqZC529JZfL + + +UWlqPiOx8hU6DM3sJUbkKG1poHCQCPL/imA+HK+VzoPxrbpKVOFER111q/bkUBH + + PQ8Jes49cM5x3Wi8fq/L+arlUn5LFjcvGqGg0r43IS0foynfgkN7dk/cnlwB+jSr + + ybK3YgjHjbWss0khn5aV9iHn69K2467H0QNG3Ppufx3Gshxjv2p5MdWX18oVy4F5 + + tZEj+o4nTegU2NPX0BNuroP4rVUke0pX7T2M8tYWaZsA+tl3KqCZafO3A6lpr8r+ + + imVvLpOFjnTJ1K7Ruhs6A8kVpd2VJsNXBE0l/r+I53gm3HWNkEK3pZLGZK1I0MD9 + + v2QJx7ECgYEA5f7B9OgcEhDXvsvm5pOwoaPDxopOWaHt5Os3olT4FBfCrMf/C6Gw + + 5KEI/lc8WcKdTX+suBBkD/+M/6ua2VxHCnatWpXBRo1WHEgoGFGlvFcQ+OGPlm2d + + w2LPtFov7YYBDNhW0B6ETS3Pe9vGr2spr0V6j8fhP3BirvmKwap2gPECgYEA7+hZ + + 4DboBwIWI4iQPJqr19b/5B9t6c4HRpfLWizjurltDENpPkHXTjpWvcnxYEpgyROB + + 7PSavd1yMYmmf1EY68MNRkmnITMRDIPQyc7mop/O3xwyS8BPZ6+8nnOfn0bLmdNT + + kkkVEM4cEZFSwUUFoqQHaHtDsgwzRBcGXHmTAnMCgYEAtbWbA6VGWDeaXJG4Mb/J + + s0sxZ/DpigNXcp8r60L6ZNWI5v1z0XrDyT45XskJU1lg8lPG3/2DMOiUO4MW6lfv + + gKLWv1TFyLntqJaRpvUK3kxjil6bFRwxoqa0tybx6tUOi1l47SDPIjLpVFAFH56o + + 5mMcO/CNU5O1Q8zABdZpneECgYEA2mTeTGovVxHjLX3IMCNthBNI51ZlLI5NuUm9 + + 6N0sgnMCfkNvryko4yHgjO0lOs76xJFpmVgi9ex9Y/M3Cne9BAKQNwgdiO9/+bCV + + hOFAu5JXNGvqrWLn5i/ouSXwjYJZHjNuxKCa+K1oh+WPPDmlI6XGyKpNueu5T6bW + + N6DE31kCgYB2l7HnVZoOtjgsu1S4PIok8o5yiJhImn4b7fXfWbT5k0gnBqpsL/0C + + uMk4uSMDC1zWRcQJSAZt/ulYvXSttth411Ljx4rzOsh8990/Br7xSngbVqUaj7t8 + + F9DHEhPnutBBMj4ky9BvqY6FSHRylmDnbx6ByalFkoKzHr2kIWzkNw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:mnsqs7br4xbc6ghtpfl5ewzjzm:jlens2myp4td3bcjogvs5gl5cbvnxl3fycfwqyi5qqxp6ddk7etq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAi5KYNdtP7AeY7JsnuEUiz/VridJtZnGytDRMoVNgpVUZ7+uR + + H9RCE0FiwFBBk4hLw6sXCXMHyBNDlE5omYzuX7El9+/Nfwc6oW5APwb79cVcMYMU + + mMXSsTeyQ29kvLt8WaoOGWdF1SurdDajd3AQndcbNQmYy4WMupLvGE4ZCaogUGYF + + qxFqGwHLJvIigHDxERWC0PKQ6Z8PlxeQLC6GLVJDZCJRwNHfGXxkGN1Gue+JDh6b + + xmUi8/JftJwrU2ayamn64xnwnfodzT6bH6wcxn29pjy4BdZeKA+z6WA7jJ7JHLp7 + + nTEfjaPy48Ski45+O+if5ThvjFSah3YXU+PPDQIDAQABAoIBACzflFVYbgEuTiHg + + HmyVucQPnSQCBg9WRcS/PdXuVxfA3SZwX8fSd+316zh2dSboPqeppa3xkFJosyUG + + 8oVPtMIKU/E7ZZ/OJLELH9fDuJVDf0kh4ijeDUfR5tvcgBBX3Pp8/Kx5Mg//ys+B + + 05uOaaE9q+8o5zmj9eN0Yy+2yED9OntDYiBg0aYuB3FpbKEkXPkt502NHoIM4wO0 + + retY0PPZsMfkIxYy5LC8buJhnXDApBWYXdQYbs9tcXAfUM/Vwbl2ds0Amb/PTnoA + + gf3PNPGR0B+jNR5kjbGUJlGIdxRKKHbAb1y99qTAU3XreaCS+1C6BnTAYI3HbtNL + + 1v5e7xcCgYEAvXV3a1I5/PJ2X/vgLsDb5rhitMNyvxhepObYvMBpl9/GS1zmkxrK + + aBgC/4YaLEHaIH1gJO9wBplPHtuDZRgr9Eb6X81qBqzhpWE3hWBwi/+cF5blbHlB + + IQem6zOraUMMJiIKUCbShgqht5DLgHupEett9N54A8+OxaWHh4MH4bMCgYEAvJfI + + SL2QJmFg8RtsRb1e/CxgvXNjNNRHNrYCEeBJuSuZShYUz7JRnaJVpaMafHId/PV1 + + nZj/OG8FlRZMORYsDZOU1EktwdrfhXX/Jrp5QjIGw3yws5kNcl1rvmR55OKuJxDQ + + YJEHLx1EgXYWKnhv1WzD/T1tYU4TvwprMJP1rD8CgYEAk3FmdYwxesxLGZnQtzH6 + + MQ1QK/NrSpKxnU3WYNaxlrNdA+uRuewAl5AQTUHU/pplIiHQgA4jNc98Bry4/iUY + + l+vhEEuxdu52URledxs9m4ZauPUDKS8YY5cr7SFyBeJbAxY8xnHgJtcBUfWKmjwi + + sMJy+T1lUznll6Wh2vE7YgcCgYBqr6p7i9EKBThj7NF5OkGLgkdPpQDQF+4ZQyk0 + + l57dA4753Df1rriA5h5xTy1ijOPt/6WDe9OVRyjvR+fiu2o8W+prlOIvsfOUekXW + + 0NJb4hT1bYpAbyquMa8Ly6cxFhLSwq4+koxv2KyyV+z+JZeOMrNEhQVlcFe3UNuG + + ZY0q3QKBgHPo5ViFrazcRe8YvW3e+8EVGhOiI6iaBHwWtv/G2h3Sb2ePjf1FPdnv + + dW199YvKZ5BU0wUjGvnGT/EIY/V6KK98n0SodFm+yI/tI8uREVjyLkA1BwWspuZe + + SYapkc7QNeQdyIq+Y9ZV/ks7Kq6XgjWXlivXE6URhBCr9xcn4jKb + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:dx7tvyr2fc4u7lxjc6kehq2svq:tiy4qh2g6lqejxcaym3rr7ymkdkinn4qised6kgxloj7sptsqu4a:3:10:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:fo2s7nih4drxob5yzbnmv3v5lu:cbyn47mjceyddva5v3fwwfhmezre57nsrm5q37pxqyg6lt76vmsq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAnZs6x26D5CRQj7bukVe0NoSa86YeTbow12aYJ50262ASxppU + + 2i0am5SA+XcTLinpy0bVuSN0b9kXqkSnAPWZ4fwbFCsgXsLvNwTiGBo+Bkgwlarl + + 8VVMz+FJLYpGxviWNlctkZ3MFEkHUs5SRnXLAE6fz2qhzdXWW/y2D3h34pqG4ETF + + 1KbU/X7OSmLzgo5hw6OsyxZYZYp/oyesie/y21TeE+6LyClb3O4mI80+vco6A9vp + + xncn1MJHDLpfY6z1sLOfC7NQ4N7J2BUvabJ6HSJVEOL4LbfoBJwo+/tKDQV48MfU + + C9NPhbV//G6T2JEg1sHcMNQuOSwQVe+hEmY8WwIDAQABAoIBAAlAGuSEjzCfXZn6 + + 8vrVdh6lDLIPuIzBEb6FFQduMxvb2SLXk4UZlJ3uyt1rzTAcKs6+tCrqhPWYNBQ8 + + 4r0HZCY6kPjhyWhPlv7GRlAVjsuLmJVHISdXnFkc5xnJdMRODJeP6TPvERMTJ18r + + /F+u6IVSGA+7p1ePeKG09yl4uO5YtHVHEynjrRbfzk+2c/6ePkWSeCpVDndCQ6eU + + me64LjZEPMFMRlGc6GhfqcT+0GPvyWIBocHZd23oAL8cJiMdXykWhDlCX6ZkkcHr + + N29MILURnGBYFOuozrYPe8zrZTGUhWpWGjZQLSYleyBM5BjCX0WR6cFBrhcdFLW7 + + Fgt8ORECgYEAu16bOPlKglvktH4ro4Ren1JpCUCW7SE8bV7hOG26MIWs9UACMYPK + + GdbK2Zkj9rVD77IQ5zWNNmmobe5jTqNpyOxMETsV6uRiGvhfzt1AqQOd2YR8vUKd + + ujdHaaU6owcWFOVDDZrBsgftMLcHmxFQDCAtH+ohfidA/OkVRbgs+OcCgYEA11XE + + wB1JfWDo/dIPUwCHUmE1AkJBEo87mp16F8e37nBXmQ1usD3h498ACRbgrNbdSqM0 + + gJ0PIKLysM781PqE7gGAn6WeudlLZ6/b2YHh31HDD2THio0+MBVKR4Rdv1rHxe9B + + nYz1A6gpxbYpFt1MrZRLRKGqa/F1J/bqfx6rbm0CgYBiUhS14urcWQg8RnDzz0Qv + + 6ni/qCsKqAQjiEQ67iljyOGnmD0Oao+k23d6k8excBEEOLZx/UHqqar+dLebzlh2 + + XLjV2eF4bvukF21/Cc8iYYl1WPZ0Af7udo98un14iwFlWaDEBM9bcplelMzi7ETK + + +B91vdBxeHu7uzu0aB8BRQKBgGUqsIMpv0seaphFRlnSl8EGVmc3RWc4z+H2NlRR + + yoJFWYJYozY9/JCYRmX+z5OkZtcYEiSSpXbJ14dl17cf86/2GL3oi8f45MpT/tAT + + i1DmEuR6jpzzetIQTpOHBpxORCkkHQmuHbaYHPf8exV45vtt/mbCJVUNXeNmyAjt + + GdGJAoGAL2huWld1IJOColg2ye15MQ1f9Pyu+9aaghglEtGrvnd3VgcH2cdVbsHj + + 5Sb2tSgT4m1N0XjT33nYCyTnwLS0txPqDU71KlTLcCfH3iPO50ppWbU6qTi2yUFj + + +MmT2Wy5/VgrsU1Z9hw7+FbXNeRnPNns4l43PE1TlZ3uQaBSF0U= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:6nqjbopsod7vfscqp45ndtfhna:ef7jrzptougwgmcofxtu3jrjgvfoib23tms67m5ssugrmp4ddqua + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAuyDM4HLs7yvKQRNJvNj7dNcszbLrH7da2Qzj+OF58jDB2Wqq + + 9ZQQcLowoltdfRZmPIADAYy16w05CGa1YeFI62ukt7KdZZ0sbGipQxaQShZzeDjk + + 6sSFyN/iQ+v9ZX0GwSSLCwULZ3JRbXPYO5fRSa1WAd+OuLQ7vC6zyPglC/IyKEXG + + i1tBPe5GKboT/1iKUjB7CRybFtERRQh0wZ6L5ChnLjpGJHEkz/Z2WZcSwsSvdcb2 + + gRTkquIk8kPMU4BFZofuFEuqVZVe27sOeklsPgeCiFedifX+S49UMuil5zVjr+VL + + kG2/ZI2IRU3JPA62RSlNrvtSaM9Ltb6TBnpZawIDAQABAoIBAByL/0VEXbSKOSNz + + +6fwGsLzKoDCM+VVlZSOx150mKO5CsbjY2uYaBOntntQ4Ie7JDiZjMaD6U1k6ded + + bOae4Clt9VBtfV5+5kPZiZd++InHjVurTkd/AyvRn7/IihJyoCup1VOxNCasBWkN + + pvtHCKSqk/gwMHfT+FhCcFHkgn5PnsfPbZRDm7jCIA2gaqmSISL4gHjJginqKiSX + + HtE4E+GO5NEkzIiNQl3kf+vcEBOTYgj3YeAKZhqO9XDGLDbZ1XHmWV8y9n2RWsjk + + ySZuMuvOYUQrp8kmnAKe1oRGrmRLexLwHM++raXYUCHEauGOirRd+e/yFHlWTA1/ + + tuqjfXkCgYEAxV/pHECWeSJaZSyY4ygO2DhYlPPw1YXZWyZnp4ptodyRj0SPHoqE + + ucDjjnQOIvgXRB2ohTrEuf0CTkJcnWtrgaWXbzHxMbLX5xp6IXeZyyU7Ly+JEzY/ + + DIZTrdbmL5vfq3pfTHIt3ea1bHG/Q6CX4ehjnV5NmJrbBpq4ibWHbIMCgYEA8rXC + + Kx4ASPmvIMQIyRrMR1g3BURiRBBdJ6O7WTFDBfUiJjnzqSo2OViZbepXMxV0h4xe + + gMoRaZAxEWc5G8UkH+tL2WpneEA2w9o9EjFX3aUz5e3IKVIys1AIIdof6r6hoFV/ + + /oQMherBDS6mxmyS6GnzPvp8UmuCz3DD9HSpmvkCgYBotxPkC1hJ+DHhT6HlkpEd + + ofdNP4bcoeDJfTytJMI5h94qFoOf/nmgW3ffUi9V2i3t05Ze6OkKi/M3NfoRArbM + + 19/Z/LMsXOgzElcNfni30I7v39ZnvPYCXRn0Nvl09MvcHFaHJmSzP/2tBUQmSwOJ + + tVN0YF3mwvHFNT0GwqqQpQKBgQCr5Lx6qwnKpUM58nzCaT9KPBjjmxX5XJmNLHHQ + + boooWv9vkVWXdnTm0m//n5tYa5aXNXvsvK/uUpfd2nxgxZObI5sZhTl4ugnPVe4w + + x0+Sg6Eo8+nyEewkgMbxqrk2GQMBOeynhkAUTDmjq2mkWFsHTZpf/Sk1ej0vy46M + + wF8qiQKBgA78rBWa8R/AB02hKh3CrIyoMwl9WwGAWRvJUuxtg8tXehMQIX8c7Wtl + + TYNLuIgitz7X4kPIxhUkFGH5kX9t2hdFaK+y5cTLayZ4Grf4poLVLFQm8rm/vApZ + + 3wP28XLiz49qZzx1LYE/n9k5V/bpQqSib/RtP0lz6Y7mN9RpRZKd + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:yo75evk4cte3b7rdw72zxvl5ye:ex6h7ff7nclucjtsqwgwu33qgmb67t4ezbrki4zbgurwn2ct6bbq:3:10:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:x2ypcho2ngz2yydnvdfg7zmuam:rnym6enrwa3tqqrhmgyo2wqdhmxfjn7wpzjrkzjtqibazembi62q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAwfmkPrdspB9pzUy2t5MhIH04ydpX+d0D3pHDWyQO5bcyu0eL + + prmWkEvPlcFW+ze0WTsp7bBnvl/ZNm/4ATxhq41cB96l6uROwL2jVOC0sJYRHZFZ + + 8BplNO6frfwsvGCVmml9cLj587VP1k6tk4eHglg1pK1rVNg5o/FzkmieGGDW/ynM + + 5FfsrCeWbFh33pr4NqrHHnR+VDADFwhYzHbMlWLOS6zujSoV1Cbum1/BIBxPijIc + + MxdsqJKWyCWA0mSbMXsV7a4altzIWax8fEbx8oxCiBPTyNFhQNW5sB0NcwQhpMf2 + + mHEuuTlMVw+RVYNBtk2vrZS9pOi2SdfFInghGwIDAQABAoIBAB/RcYHWIwHYTfRz + + /nl7WWY+aYJ23efUZg5Bbmr0rbrnA5vZHw0Qs/lkbh8nBpERG0oTHIwVhoGhsFGF + + KV3D3VOUzav+zMw3JLyUqYZCkRvG6fTQgxERtgM/lz16DY6IRfynttYMNE1SiE+O + + OrEQp1ztV5NKh74e9R7cJt81E6XKHPYAR1T78RqRiz8eTrfkECI9Ad73043NwRXQ + + 273Ph9X0EXKZh9RQYNuLXlvaTfMTU22JpPf42kL6/GlZSY7Ex9ldaQya1V1TG8zr + + qmcTX94hg+TMXmt6xx/imxt/DA3JOqTpIrA14acmI757uUX6FmGHI/0ATQBL1Cr6 + + 8oY43bECgYEA1lVDh5cr7aGRIcomfrOHQeUQgP4EaVpOfF8VigcTk3GqOxfSKTND + + BqDUiOO14ETjs/qV72poFXdruRNZDEBT4w9MwZV/J9K0eUtNTnh55X5BDLIG90nK + + yAfcdh2PvVeDBeA4hoLaEsumgBy3bWr2WfY1O79sPXvoRWJT10+tnesCgYEA5685 + + XDtNGlz8tSUJpBXmaAAoJQzbvRjOtlH65BujTFBWiW5XXH3kURUlCOYShyM2Age1 + + S01e22WnpgSlE+4DbrV0MVB3dBYLif13B3+iCOPZ77m2uO4kqB870K5wINBMWuf8 + + /mv69nPhCS8Mqz99JOGNl2vLtwQzrkfNhldmTZECgYBwTlUIIyodZd9KOUZadW+W + + E5TGQlPFcFBX0urSXErho1lzhVPVysqAGp3C7K5MSUyW7eLKhJLtTJnhbEXoqXxL + + KaUqek8aasmuFMr5Jx+YJMOpB0+nG79peNUH/w1mRQied5KmyMHDv3oK/wEOEFHt + + aZkTKYZp4Rcf5BnSZCmw6QKBgCXXKLc3uFAl/+BWPEzghtFVtTjX8Mvh0WFV4nR/ + + TxyXwoqPyxUAOtpDadkaOsx3o8qRF7tE18ldwRQMjinDJixe1qt3SQtczmWrUFWZ + + Mw3gqSfOXVm3C6Wp9EsRMp8pZk8ytM+ZM1QteQPW+2q84+OyMz4YDR3HQemlMJxQ + + ihUBAoGBAJnLqJG0ckNRnuaD0SM93Stvx5xOu3g2uzy0zJYjzjIQfu2gNNx/KnuF + + iOOJID+Y5HgvqxXjIuRzxyH51rYeojVcouSIxpkbShDkURDSS6l+pfEtRcH1G1GM + + CR9cLUiNJqUgtyLxrFljyKKdfhpQ1o7o7DBhJ2C5xwr8WEko+L5m + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:thtsw4tgtfmq4m3ajpgxuodvum:64bbbja2hsofykzx2imjzvtys33xhinh3kuyg274bkyuknwtobha + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEA5PUmN2ICIhg9Oj1fJgL8KS15MQuycqxSPnRGryj70RgoY/x6 + + 8MguJ8Ofz8JvXBVEOzMLT4kYihyce6fVPTzNv54/ln4Iw334UDEVmsY97hNf8/tl + + EuksNVofSTmUOQxPrJVeM0ezNGFJTVEPTPPjhPjFlA+ANox3h3x/W5GI1zXJopiI + + llMmpo9Q+UhcP5R250bchMJ+wxK79bwm1HH/1tfICLCeXnoX3JT+ndeptbfks2j9 + + /aQEz1x6YLLkLJFWVZBrCTwbQ1GMmKHe/7fwis3yUknn4MtzwzeN2a+KbNPCa44W + + /77Ono+sGlZ+JfdOmAr+eGgO2Dn1sMUhZWDqQwIDAQABAoIBAAsQabNdchrxruvE + + kXeFx2e6AdRD63CtMSBBgDTwtxKIp1MFnW9LTSewxWVF0RnTEUQHGHHUfzIVZd53 + + 4s8dxBeRbyM3nfbMfJZreM7M66s4lnd025KJYBCH9WEVfjsvhB4j7bRur5NFbERn + + OWUPmBwR5YJdKWX5bcFHW+Qx6Tn1EQoYnOS+e4gYbf94tK7l0J1tqJ9h2LOo6yMe + + PQctpdwRKAOVneENboh1pdxIHYXwziayEjuAo8QaPkF2LxroJASgRG3o2aDg7BUo + + EXFfvhxBzFNe9zyCVrBp7PfH740R2CyT5vbf7W4d1vhN1uqhRoFLkVWW12DEAvD0 + + 5No/hNECgYEA+0wtYGe7c7p1rFJHw88ngj1t9gWRY4H1JcNZ9o9/7ZOFQRHG3d+s + + HdQOmNJ7wJlhIjp/NQQT5TiffFSWAaPlD1oUJ63N8UupyEGlQsONnGoA66vOkXVh + + +Pb3MhD1kH5HDG5uMp/BEIJMVDJnf/O+8McEEbvNj0Jxf3ovM0oGohsCgYEA6T30 + + QGc5/ZDXmDZDbq4kaBL9WiqaGj5RLMluYfLDlsW0pxOO24U/A/wP3qVzNNjlqoFN + + TApi/x1TUFwaQJ3pjiKBRTO36+i8yW0Kyd7JnMws7ai4uNYlkD0gUUynmaiYvEJ5 + + QA7sgBuDhK0aI+hSoGCU5gPNv+ErWE6v+VTLmvkCgYArS22J7XU7NAWwAaEBmEAL + + TUATodPxm+M7dVObig+VQ9QyaLilYzLJFM7K/4B4pzQ37HIcFS7EUCQSDJSnhbAi + + G/fa+jO//bQrnzu0q/JK32x3Letx3hJaDVp7UrasBUWCW8g6ipF9oaU64FA6mCju + + XKtTztJUezMIrmlRYdCQvwKBgCoZQZ3iQ+hNnWxe1vsCOZYDX3FH4Tq9Zr9zuBW7 + + 0KvFEZ9ae12KBl68v0yLhmjSgVmuLvp7oXS0oVYO2boyBnbeKYEJHbhZ8MFWiiz3 + + pmJDxBQ9cOID3RHUxqGF+XZVpQPN5761MuDIlot7Bw3WIBvMcvO1Wgy5Iq60vTR+ + + pqVZAoGAbZurdaGhKu9DyJroKTRRv4Sk81vsI4hNgZuyE8FW35vfJf3XaWVIVo5P + + aOtH2mudq2vws0C16/W5fq+vwLa1/xY2X7Ni4ubRF915BHo2zTwR3K5dUZKG8QxP + + hHOaZsh6CgxL2cLCiUGIWNpKkcOz69GnZZoY0KJS0KazKTDGdMk= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:4gokef54smahrbfr4kq3jhc4zq:owpwwfp5gof2vhly5u6jdnbsfuwwwhqkazpsbeg3nldxv5pse2iq:3:10:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:eb4hwxibn33xlwshgqgpridd7e:7ca4kdczkgf5dowmqrazebqydxt2cmb2biui53d3etgy3rlcwkiq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAxxM8zLQ6lSfHQ5U876H/kkiJ4+xxuvH8HNaT0EhF144PQyLi + + pYDMOgv9h9nN8Da9w4wviZLj5kM3kVhPF1ElPq3JNEW80o3J3w/5hTX/B0OpU7t9 + + SXNcKGOftT9tYx0+38LzH6bbqQnYAB4KFfLyus1truXeJMzIu/3pLoINNT0My3ZZ + + 3Fjr/+Pwcgxq59o4atIJlzLILQo3UwpofAwBhD1X0aNiHc/BYxjMdAY0uJABvwxk + + 7JfC2XckIVdTCtbOz4b6m/HoGU71/vdg6gRTmXy4m/18b+yuEE74omovDXa1Exkg + + 1DroYe9s9zQUzLZABn86xUZwR/c+vt+qK8ab9wIDAQABAoIBAExNj9bIV9H2wrYh + + PA9/cMWBfzS42mi0upTVHCfPo9F4lln9w5B7Gww+r0kETx585ORQVaIuBqMp7WEM + + z5fY1uU82CtsdXDgvtj8Nv/7j8oZgYviB6YBDPhAIyVl78f3HDPI9cYSfww+BSga + + W3RJQAcgmSNZ4PkK8v+3VUqpt2VJWUHOHp4CETT3aL7JZpyjt4IlUb6gROey4XAg + + KubV/WTjrHFbS9RyFiFD+ZpD9eXnGand1yUemMDy5N9gAM6MAdYHjNFaO/fq9vGK + + L6Rr/Xf1vmDMJ849kCEG4rOpLwMkol9v6L/eO+xssuvPRHHW/BjCbFTtkPAD99vS + + tW80Co0CgYEA1KavoQqX+ApzTahmLON85F2RkZVMAFmNa9PYzbXrr3pmrFJg0ac6 + + V+vPYBTlaJ10bDLYEsD+rpYqiHUwXsm99yHBxfhRHdvQFe5CfjLVQqh5p96PMta3 + + Eraiy80cS9287VTaVV4IVJarbn3BootOyK/VGij5YNR3COrrr2kDgiUCgYEA76gV + + AIOEuGPteM19cUYRzJh/Q3TlDDhc7jK3n/N5Nivtfris33AorN9lEtlQ3i/Gk/aY + + pNUNFS9K0PW/8u3M6yoGDeh+w1wLb1RHUTamZvOJiTSknb5vNZWTqFx/d16WvhDX + + wP4QF5YKVVRdOGnrm2XdWlsbwE4IlMWna4NSVOsCgYEAvQx/AOVhGzN3NGfshiWr + + x33jxxB6Y6k5j83jZWZA5F0l4DbQOjK4LKfIUbviAzJP6Uz+SRXolR+NKok8elhS + + GN2a3jwXKTtc79JErNrWOw96MCItHl5CnVFew15StKOprTiNbe1N7J2SRIVqWu4M + + GWAwTLR2l33rYTMwWl46rz0CgYBX7oX2MEtMFG4XOt5h52G0feeD6qn3t95xD27M + + Y1sAA1Iagsv7F331H+pH5jCDtWfY9ku/fuRT94wt611IVvQu/LZH+Bw6tdUEPhoE + + tFaNw6GdFBGqRysqr/0DcxzZwXzxs+BV0WI6JTUZZeDmSAbId7Gl63PdNUR0wajS + + C9bzjQKBgQCxJZxGJT0MUrX8BzB/tRcdPWpFhnQtDENMdeunArN27KbL04dSmrZZ + + 1V+H8GY1bBooSyULm+H2fouuavnHN4VHp6DI2JJ9wcxNsY8l8NOrrwh9y3sexWFJ + + 1I626BJlwuFT3Vd/0IUpJjPwQSVj1On2cAMTfsd3y0B56H2GiAXcjA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:5spgmqz7se34bzntgo3wgnqb34:zbzy5bsn6kkh6dz7leo4x3cfoiuhnotjp3o3n32nj43rkpoee6ea + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAwi+iQ/lFevdNoN9SEG0Ie3i85CHwJAp+ZcVxyybkesM2bDzq + + 1QQIfD/LZ3Wk3BLxJNviF3HPVAEBjA+EK/vI1hsw912YAmClkt3/YQOIVHZ9DKHk + + iNejKGC8ViL8YHABszBlnPshVB1k/oXwBO0izlwP+9hUGXbHjzuksYkq0FLlGAJD + + bNPvAunUeC6NrSsA0lgPDoVdMop1dktN0tOhLxEauDOQu3YpVHLHhPVRpTQ8c2S/ + + C4JsvoQzT8BWuilfCqjkua2Ul0oq6mTSV5nVE5GFxcxghV0+5M5csQtiFm0wmxTp + + ZQFGGdw8bGMbF7Ghn+k9wfPnJroSGODuTGyUqwIDAQABAoIBAEH5wiVbG2awgGEA + + jxbCnMeqmW7fMwJjyFcWkteFgspM6gAzYEv4f1OLrzWbDGSzUNgHlxUFF36AiwCF + + ww/Yj39jJKte0sc4A/lW0K4q75ZW3Zy9onJ15VrSJxsS7vFrDMDPWC7SShwUkpxB + + cG+UDCfVsp6L/OLb7uh0yLuDEZdOgnkDP4PD5v6bhccxm4VJK6LmU1+ozeFVoyR8 + + Azp/kCPwBjfs0qZ+pfyR+0uQlgcOqW/JcOTeGk0E0BKHxYws+eEZS/FpPEeKYUNs + + tgLZAcuqqhniijsWpvkhcItD8wn+Bl/6ieVMDdo4qx1weXjlTx/CVKZOcsBNVULK + + PTDUQuUCgYEAyVVq3ac/Z30nvDJbrvg396VqY6SDQF2QSVbV995ZKRofxJwpeWET + + QNoIBgoVIVxbk8bOs1ojAIFyPkqtIuunkTlsaVRfdopx/choA6mzRHed4YQOV4za + + Uq7xwmmOCS/vJA2xNl+BXnDd+K2dERtLl8iW+zzBbZ4wJN2vvvpKn10CgYEA9ulk + + PDQzTpa6SiOO1VxlhN81X7HFY+k/FJe6Ro9tVnnOCGJPJcum+4yicBATKmhrwLQk + + H+mmqxj2VBu7WLCgNpEEaQPmVLivE5I74wo7zAM9952r5Cw+cf+xtfNNYL324o8j + + VBp3FEV8U41uy1nsmCyf4LUMBCyFVTca25NCK6cCgYAowDpGLQD/YGy3gfXev20M + + mhWjn3vVflqjDYl3hzDCyf/eGsGmSMjN2pO/LTFDtF7w1U+nK7pj8s993j2XEN20 + + 3kucMjC0XKdf971d6G5ZkGCLceA5RlA2ZiSW9iiCoYok4QSafdBAnlW/bNyaxsyR + + J0+wAIciOd+CxsA4xo5uHQKBgASjR6W12UzdmewwlMs/LAz94FPG1A1XYT7yxqXy + + pbwdF5iiuBfepmlNL/Po6WM/iN6aw57x1ZabJm1YBAHbd3bu7GVIlHf87BTzBzrx + + g0QGv5A6HvNvPVEI236ubkKl7tA8ng5DXP89euNa4bziGIaXN/2RiQM/DtYV7eQ3 + + 9OM7AoGBAKE1BocDrOsN55olO9cnw4nQeBzXvlstK9rZ5AYa3FKnNs/sY2euzlBl + + m402fQ91RfSF3pBbUX5cXVdbNt/g16bN7bJ3tI4A4XSo71Pr6+nmiaAt2WDH2IWy + + X5cw5+CXCLok9331H0W8Im3yiuTU73WPxGWJ7voDpoxpBGj9X6it + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:7vfgl5cv4nlzqx35z4uthjv36y:nnueftbzxfz6u5yjxwwofaxzzft7xss5wzfh66rrcwv2zwrm63sa:3:10:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:f5xydhnzscumihbschybuyocvi:y3wz7t7pyj7id3xyzdut5xwsvpmzxxbotdy7b2azois7fxfuylna + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAofW4kcitiw1sFYCYY0wIJXe0zMw35+vVTFDpF3kH6dTKcemq + + oHylBFmDa/qGwg79GA9TfpUVJ16EgPKEU3mBdls1MyWrqHDfy8JsQhHPS9fUD+td + + cLJFKypM89gtEXCt16zWe+36pL13rffT73hkoeaqGI8vE+xZazd4ZnFWd0bTGpl+ + + ZYmKMSbGNY6MAQfWPCOeQ4EK+ReIPm1dKuFAC2H3g6+BGNCArnLSSCF6QgofRvXx + + xy/taEULnHHRf8G9ELRIKpT7MQRediBwRU4C6dizNTmVKigOEKIQ5uxOCjS9gjX4 + + ng2ng3pErVaOB9jkjROOPrtF6uCOQY1cT0zTMwIDAQABAoIBAELu5o7VNSd07hi6 + + 0v+igfFeFenXcjlWRQnrnFE3kzYnW10VeQ8nRBlWlxIucLfNcvqZBuQW362sCa2y + + zE4lNoQ/8G4JYPZVY5/1Y0Ew1A9fjIPhvPWgryZGLpRN4F5HR4kNJH0GHmIr7USH + + 2d4rTsd8KQrKTeX5dQDy5T7NEzNqeBtsb0Imo+5hsZdCI4NMZJ1wYnx6OE8uYMOu + + L5MMl3uIkHQwWiRuilods5bW5a5kBmzeE5X0hsGi+czYVXcD6NvS1ColRi8Hpw59 + + ZKeGJdaX5eCOGFpUIkM70e3wIboCPN0msyEsWPNfgeuhAeJJ/l7BZK1avr2+mhVs + + E5LyzAkCgYEAuFIs0imReqm3/f8ahvlun7VPNVqeOjr0Qp/O5LpDv4V5x2RLG6fR + + MBUUM4Lf1Rknn7EHYfYZzl0FheNooQcIMO+wwZ5P7dsTDPMOpcjH4r+88xxa4q75 + + fiHOmfmlcXn36GKCo6km+PjmA9t72Yd/ylRFkx9KMJtNiIpI3UNABrsCgYEA4PFp + + iuCwLtL2MesiMSWjNFhJ3766g7ckQDBeKEavXt0ZrteEXAUXuywqpGrrhiLG4bT1 + + LbXfkoVfuvUk3JBSmTVLuCRtUGdNeAleB1Q/HC7WO1++yKHm1yFveeDN7+fJQ+y+ + + pdoYgZ58NtjBQEEdshtaz2fKwxCyb/WyI2uMaekCgYAju4KG55oVXouVyPu6iOaC + + PaLyY/PitAUgWVzBiL6ThWu7VN0eqmTqXlvBNLDx3eOJmMcmnZAZKn1knFZvSS60 + + VfM9RdSW9u51hzUivI7LjYIy2x9fbK5fXmxv+y6wlgWSXm6XDbbJc28b9lPHMvZ6 + + IeYvBFTcoW7hdnVzt5LU+wKBgGCMHZHHKLegQp1gX9eaYPdZobOQKHvaQovudqtw + + 01qzKY/a3uukH/BtX4wcfCShjp1XzxgkhOZdqp4TFBQ7OciakHpj4Ctve1e3JY2d + + wky1aawoRznUC8Fwj2lPbPS4lrE5zwZemsAfpw7fb+rFSBqnFQ4KbYPWCdB2M1Ry + + l9zpAoGAKRl7T81Ji0P1T66Mi0i0vm+l32QZuSd5pUyBZtsycFcuVz1F+lDIWhMA + + fuai8L6uzFNd/ErekSIQXL02buGHqp19QpbxRlzNYY4OB4OMz6pZkWtP6H97hXxm + + lGTDX1qzm6DfQpJjw39B3neYZC7cwAImcDyvr1kb/tlOmePvv5U= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:2hqvwmzuxctume2eereg7xj6vm:qucnebkcgyqkipwxlxmt4k5nagvufpmhahuvfvmncuihp2llobzq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEApvVF2hYDR6x/aIKoeIrLgvEerWkVwxeTUYP1rTP3faTPXZaJ + + RyDqHMkwSVlkTIdhorRROoxWgrD8GhI9Uc443ac1iFj7MKE61S2xnKNplhnh1sQQ + + OmjkCn0z9cIqCdaqDCtLwKnLKEKqbm30JoCi/nGc2Sh6FGvJ5Wa2gViqI8bbBlIy + + RzO1NcoJjEVmxlAqLgH79XDp2n1TOJvm0V8WsOiSNQREcMcbLTcl+cwTbpsKkE2d + + gmkzej9Vf/PMxHrGxGqYOUPsYwX2gNNiEWx6pMN+INUgJXuMOlwdgvEDxiCz3Noq + + WsJpTsJKmr3rPrPvKuhlDx7EsZQ9taxTyB2OXwIDAQABAoIBAFI/9t+PhKIkqsez + + xodL6SJi4vgPEvd/f8Xiun9PYJd3P+kdJhfycSMpQi6AaVcCQulC59luFZhg1HGL + + lsXcUEtx+n9nRqgYZcFrt1oxbuzRZ17ETDJaRi2crKJfuxIJvNAt7C3H+BunbArn + + BCaLrMCo+9pHhIzW5SmsRjDGm1rv6l7gMMb6cJ0n+K1Vc3dy1yTDLqXcpEuC2OpY + + bdekHv3S2mCwDD2jSpKBhX/fpWrKEoS34G9IL78tYSpUAxAJqPaHJGf6a/GGJlVO + + Wol5ZnfVduocG0RYfB/Kv5Mihwt/d7XuSDivefP0myr7w+m3XsOm00/BUy2eVKmP + + yrUDLcECgYEAyGsJwXMkNYw/hIRU3f4gekJrwHkWvsJsDkxluyWfjLn4XQGiylI7 + + /pix1qj9LSFi5TDLIMzZ7UlJgENNbcYy8jFx9AepSMHFhUvARWncOG7Uj1uHLOA0 + + ySD6V8dCnqaCUImf8chKiWr+joIdoFBx9xS3PirHCRQZaKjYkGABa08CgYEA1UKx + + uf04DS9E60ZXQf/Yqw4PZOpFgPce63j9mkggebnmrOcNMub+4BUdW91FinqT+IkW + + Qt1sI9TYtucBg2tZF5LkIRWnvR1TeSgY3qZsFh1qv4Q2zVmTs+ONUv/e96tnvyY0 + + s3tdeznWvWpqakE/62hnjdLIVcQRHmlLDAwJp/ECgYASPEL/+gUCZkdlPFEofbXg + + yehZ8+qQ4snIJ0VeWNcCi+1AMSTpub/Bs40C1g9rKs1/wwfIbTsq7u8kH3uNEGqU + + RNF0fbn2Z8McFL9i0XX7IIJwpMhQ2fmTj0+X6wZxvv6+azdFXY8Cn9yXhNlDO+6S + + p6zgmC3R8qU5M5u4zzNx2wKBgE5ggp0OWUlPNA8b/Pm+o8zKEBJQn1a0e+KixuGq + + 3HSgRA0LpagtiUKlv/KBMgug3T0cdNgCNLo+gZ9G6yF3lHi7fahDIzC31HPUrr81 + + fsfp68+TMejqoQQd/1SfwTxY/Hod+oR0NHkTWr6mm5GNhYZpCpXu/721n20D2ZcF + + 3Y6hAoGBAIcx/SZKMhXCGSx0/i6hS7DqXw2rlMsO0/jFPq8jyWpjES/BV31cbkqX + + i5QiyVspb2k5cE/NveUrrsMP3HHQpY9gJUr+GineG+aWr8Bruh2nCrar7ppimhYR + + 6ek5FVvZPBvVVGrhIhX6XQ7RNnRSr0UkF9grNkPn6QQNWcj8f145 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:cy7fmjsldeakhfd4psbmghmqyi:6a6uvyai4jkzz6hj5yjugm6uie5etvymcudgiwwjh47apz636zwa:3:10:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:zxil2jxwwoe6le5k73zleft6oy:gamewch4gcjlcb3xb6jzqqa6a6xumhsagoeakdf4ranxvqrq3hiq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA1ga6vTinyDMFCVRuC+g+QEjCE4RqjfDLT2Jnq6F0Ld09to0h + + wIk55Pl7BCUanPbvA2C4Iy6uH6Zd8ixtrzfcI0neGUkfwn2k8PJ7nYO1DJ4E7IgB + + COly2AABlm4C943YRx5774qz5cKgYa+1+OtYZv/inbD8f97uHnfD8pql99TNKEZA + + y2yE1sZ93KSdTHidOXcj+EFNwIpBtnw1OSwx8rQl5L0zUcYRjd2J/709MRmYLaXJ + + F//mZQdyETFGuD4VOfvhcZiUueNnDxkCjM2YBNU6BJXOWeJsJ8ypgubzzuhOR+pj + + ERMo7tBnqZQYYcYe4Q4zhWF1IevGmwtWXAU4pQIDAQABAoIBAAWYad9AZ9w9iKca + + Si8WOQ5pU/kDpwHH+SniNjiiQSiqqI5NuUOHjlOQFU29XbuJOpICrfSSp+tu6Blt + + OFpN/aBG1r9EV364Q8OVIioOZ+8bS+nNJLt/IKSSAJ0x0zvjvTxD5LADKTnbcT0+ + + 14m0pNeog1v35RDkLTUT/lhftoOBxEUm/6XQOpfhp3RcUypuf2po7mbpFHvcVpZe + + DCFhp8/DWho+Oq6yBMsPavP0yqQEgFulbigvMUhq1a3xqnOO6T6qq/A0Ae5u8y4Y + + ItK6gzqhXkrtkyvawAbCwZfre45NXaVFcHFXT6DqHRKQE0GtAs0sI3HuRm78e6Cx + + 1ef3a68CgYEA4krJaRWuujRee0XgMPv+lmFYLC/bs+uiMITl0zkt6HCNj23eNdmO + + GP6J96V6tknKzdCoDkicf4zZqscoCCqm9WU+u/Bfra0pWY9mXVYSnyo46m98cX3r + + dIqcxq7uet8aMzZXn0z03PgT+ytOS2GMucpMBb/WnklS6hF8lfFCTTcCgYEA8h+2 + + dgVlyjDmXUf79WVI7J1Of8NEIGYUERaZGAzwX5oTRPSQc7iN2pRwZWBZbR2LlrJ8 + + 23jV/Gx57C9V3eblhYRjR4wYTKkFak98YKyZnckzMCaFMWaiBYz0aLADsVn3CB2A + + yte9NA5L8Co3OlWo7OPGR+MwhGptYCUPiBtUtwMCgYA/n3tFWl1H6RVvX1QLMa6A + + pVnfAo2o5mUxcwwS+Q6ZPZvvaZqCVWqISHiN8i6wNcsZVsMJUQz/J6DDTT9KHIPY + + luCugoTEFd18Wr8TGvIdYgeikjnQxvB+UcKGcgSG81cwcuTr2v01a2Jiyeg3dXPV + + gLUjIK68zizLtqLqnWxgvQKBgCiWXFXIbdnI/LTiXkAyrFjNvdz49LChq/d5XEyF + + zr2X7GcAwD5Fz7G2dGjqD9OUwlOOtBNuXCCmZoHLJY+/JvaMzL+volsncjrx/B2Q + + kWe71JLbwjQXyk035biu2M+gDyMTHwXhyFuzkdM+oGds+JZNUG24jeeEl7UoQURF + + oJvVAoGBAJvblfRFyShYaeIj/mtQhBgdJ1rHLmKcQNlgERnH4M0uwFOxLqSkgZWa + + uRCOGQRlIW1+lNMqYFNSeq+1Qp3DT3Y5E/9Rvp8aPqNjN4oCCFmaNNHBgUkgqDS9 + + EPG2GwgfWxGicfJ+ntis05EMbNxSY5MdoO3kJzRxcoZvlzrDEK+P + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:drsoyrobruplipvl2zet24hvhi:zvyy5uqu52rzcae6erus2ytl3dugnsf7n7im725vxutz3imfi6qq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEAr4dAM7CUJMARGjCtRYqUue6rdSHxf7rn7zqNJ0k/5DMs3dO2 + + cSdEuzPmPclqEXoE/XUTDszfZxkNIzKpcL084WTuzcecchxPAfuD95ZlWdRIK/2f + + Q4OTeIycpBycdEEfG2jbt/zNbUoBfRpQTTq1T8DiK2An12CEAljdGaLgBHgn9/2F + + 7xMYEDIcjtY9gID8Kkqd4PQmh06renaK5Q6QtwmVoztj/U2O2bdhAtUmejt7bGNX + + 3b2xewZNBtM2e2iJLZ2TgK7b1XIx07/Fw05RHH7bnTpRwIeAR4e5ECGegUKVucaB + + BM84CvbVpOasZqcssIcflEsI4yGUgozHlIgk0wIDAQABAoIBACfNZpySBPXUa8xh + + j1j+lL0Yxt53xPhu3JsdztZCwO8xP5JJqMw92FMO8L3AB4JRBgKnYpvvjxUk1BrQ + + KSX8c2q05YXaJrqlerD7ZLBm9TKKdZcsGspHctBaKkb4ie2+upwPigtNkxOePXot + + 1lm831JnbaHiWwZ2x1h06CYhDeVVLZuU5Yyp33l7X/hUlE2YaxOtL7ODZKUs2qvo + + 643v2x9FzZB6g44n8HWrJzxx6rtZt8qj/G7h3YVvQkT6D1LjVRD/IBVQ5+Un99k4 + + IxWuMZ5u2jKitpLlxWMuMKYQvw+BWpp7s9nTp/NkPKNfknptWIgsMY5yxwDnPA4g + + TkSfa+ECgYEA3MUmD0djOeR/YiXNt9ETkSHjL6ADPhdTEtH7BeRoRrAQ7FJXOiJB + + RiaIJBasJrBz8npqyfyFfYBJSe9lJDz2zSGqitmJ6YyWnnEv4gr7XDERGhkfK9Lv + + F9hCMQLS6KdoO7jBG9thNBpmEheSlOvaT+LQynQ8bUOdNMXk2LPuR7ECgYEAy4nl + + CRp1YdenVXO4qttKVXJXWh8OJ82dyNgaX1krHsCnph/P7AlB81VKZ85Arqo690YB + + Lu5BNJgsWcmUIt5CMNXWl4DDqneT6gwagRpEmiBSlEV5ByJagkrLKKX6Mis5Cuu9 + + x5nbZ/09pX+3UVfD1i4DEChErGgzCDicNmKLWcMCgYEAlcCpk32iIjgL7GCmTcTl + + 1/G7sKeC65BYypBjDVklHqX5pMQp5QYtbs9eU9SJS+kvjVBatc60IjBuBlf8LHuq + + EfV/QJZVhXXXCXzPtS4r2RpzdleKHGkFxA/uvl4jAKvl+XTWkPXb1sL9b9JLnPbr + + bHr3lA0KnDdcINsH47MRs9ECgYEAtbY1OQxbEW/jX2HB0x+V3HUJUVb6X0StghqU + + aN2Fpp3ezmwGR7b4HxLdK5Gyo30syYfBFLH2msrkhYB2dS6yL0EppPZ7ORwqfMAz + + hWD7MBJ9RwxDAcCEx1+YwoBzvwhhk8NlGebdP5iRycgc1E0jdHp9l5YrwTQBo2xO + + 4irWN9sCgYEAgFSvJKzRr2lpiAAjFs2iDEv01MDAcGRmMTBephSGBhNA4UjZZom/ + + W5gbQnHOhk9AY2qHi+z8Dzg1e1gU6pbVpNui3lSbng8sFbqDmpbhGyxXtve2eZyH + + mODJTFY/6VgevSdbgXo31ci60X7rYeGj7njmVGlGF8M9gn7jatE6ASg= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:ptsofqwylmkvzmuvrw5n34j3ma:ky2fs7xrlke64w6kfmhzsuilzxbhfrwwzkxih4rykpbxrr3bxhiq:3:10:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:c6l2mn3jlibs5zzoy2bpamqhru:migiw43ipkn5n2poogkq5n427lfhkbtrlwplue6mjh2lxorkkxtq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAsud691onrSR8mmRebEYMCb9vV9fBoPjt9ARGVUHAd4jSapGF + + bEa/lSUnSK/8pmEMmflmbDQGw7pG5bY33K23wPqG8LP5z5TqK9junZaBIJPoJV6S + + jaNJ8DVh+9AQ9f8bdt3dgAkMdRLEKCqKj0KHBBCphvoJ4qROy43ljaMcS5+MoEi9 + + q0cUKawtXGvwvitSfoLhYqlOij95W0hwD0kCW0tE1u7iaAwcQC0vZ4b0uEUNPq+Z + + UbbIQtl3ptlWjl+lUubhE5VFCnK77Keinw84HD5Yjom6uTsddorr4vhuu8iCNdP9 + + A1SVt8Aot4oKt6UeNUcAM0PDK0M+3Y+XHkMceQIDAQABAoIBABD8qz+Yyxsk04L6 + + ZD/OH97+ExWpahx9fmSU0lPOkDaZYndVdXB8QD0qX7JGaYwnu2FUXb4I65qCkbBG + + jsPQp9m2QAFTaXUlG94JdVC3xW+BM8H2mp5BwqfA/dqB3VZqQGKXOuypD0p/e2of + + 7fOf2r+PUHV9QNqJBOVNhh4efnWMmj/Z8dJSHnUVIz7iF5m0UFcS7ewKRRPu7rST + + hE2tQv9ezvua66F6iYWN4Lfw0rAOyUA7CFm0VKDoEB3PcyRgD1G38XBpk2EHwKJv + + mKu0pf+AfzeNvpfoRh+z+40hdlgI1OVfIm8RJuhaA3D58Nlsf1iLS7mmbkEJjcna + + kKBnkeECgYEAyXN0Zmar93SfLx97ZcPcsRI3OTQSeSBzS+W/imv3NXOOmVawyeqm + + mFvScTJKo0f4hMWdAZxReepNywrrn5PzTlnQndnJv1n8oqhUtgLLyi0N2YJR8wxm + + YCGxn1t1z9DVBSGTAlx/2Am2DrhQjeXYsI+uGlkRXScQJil+9ki4cBECgYEA41kW + + Yg5gWoqsXSKrJDWvYNQcJCLbSOIUEBsXS60bp2F0rpxLFgPs93A+I9HCSH7qL+Dt + + dgQWgAry6Z0bzZdsXNLrXkqHIFaOXTisBxodvMWRH6dbJLyFVt1QYw8LF2UBIRAD + + 5SiKN8/rxRCuyxpf7CNvzyKlrMmn6JrfhNmwTekCgYAOwrjqr+c10IPBbisaf8lx + + 6AXH2TrpSSlpjEIGoHaSog72yVVW1iyyyTeYN7kkUaeyAtDIR23o4vQkRn6RSMPx + + H7+bcVPJA4zxVigu1fGctMRpBZV/m478yDs9k/QD8CdLovQkniZ36+49EeBFJWxF + + M6HsKE6PZsdWJIA7B4UMIQKBgGIItGIsGNhyG8k9fdbrX2i9jjT24uAWvNgFFpKH + + XvlaSNpSgv5HSxOXzvPbK4/fSlTDBSJyuNEV55FdMfQBa7TLLrtGH+aN7G2+Vk/p + + rxELkHy5yc+Zi1XdsSBGCF5aK5Z6NXPHe3J9sgkUHItwIBTPYxNKuW48tq7Suber + + tx6hAoGAMpcvnPUjv1LLf10MWHoXxYlPvk1kL9INWQIH+dlOdp/3IKglf2YRN5Id + + bhCrwyIEEcp5iyNxgxrKYDJwEJblJV4M3vFEIkoXOPFNni1mazfBb1tnuWCty7Me + + gXy3wcxH5qIGhmdiJdubUyZ2Spz37spBASoV82HzeeW+x/pVtVw= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:immegpvupjky66rdfjm4d6wef4:6j6gmacjaguy375eqqxrigvknrb23lngyzhdv47ynty2iihpqmiq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEApP6Z4uiEAWfE/DO2Q0GeO8AlR5WgZpEd+/hF3epJmGYyTvRQ + + Gx2ZG6szk/btuLkI9fStqs3paQFW8aJG5I4HJjM0w2N86KIDgtexHL/zqf8ogCV5 + + w8LWGUPwyiokbUXFdo/td7pbzbW1AYNOLohpWtMkhalxtTIWm739TTPDGemWGilT + + 5rHOT3NbNmPjGPG645CYadJNShR2F+B0AWNZnxANcBD8IgMWvIl8IrlMkH1mUKux + + TRf4LneD1X438tQ2hCsLPcgxXJePyzww8pXujXVrv6Y5LsVoaxEy+qGeLMIcz6qT + + EgilvtiIO5GVO3mDR1TboVAk1sCc9DMPtAzV8wIDAQABAoIBAAT44zxSU4ATV31e + + NZTrSlB0pur0WGQe5W9tePWKFPOxyLxWYn+esbmCvEguPdW+RcXbvMwT7n/KmYso + + n8hNe2usSV/GBMKh90cfJug95KLv3JGYD4ZVvcv/HyeIg5aDbsL27WoZRKD7Y9wK + + z/VZCQvCpywcAiA6xTGmVRbZg3ypX/FdANVoh9ajiulwolhBss+f7OKrqJ9pnGF4 + + cqYBWju0fmZM4KE5nXE6ab3ea9oan7nXWIz+TTWxFJkLvg5/Kabffspokxc0j3nM + + DuMKJFTKpJqazitMoFsxGfaketjwwNZbgwleFOFrxYxtP257rPHF/UFqflIpnh/S + + 7ZF/zYECgYEAtiLFm2E4Naav/4agcOB+HHnFE9xT8ObIlEM+jTKwbYP6Ib9Xecj9 + + PnxLXmlC4KTgnkHtCPGYdUD4GeoOhDTI0VACgQv+HzY70DDbtN6UNak46AYcKnX/ + + LPFJhOWj7/EQ1md/BzzmHIudW1k9o8LZ1KIF/uy5pUi0i2R9yP5Y8UECgYEA5+g7 + + H8Z/RIODQR3esb+j1CntJyYdoEy2U8GZuFg503hyleiOGG9JKSeBAQq2nqnVUWUQ + + AiPo/vmk91GpoQvJycjQT+C6tgSzzUvjLs/SnzxAe0RwbAjn+m4OCy66WBxgSopY + + NtE7IbKxZJhXVOy/5vjr9UfeeLrGKoVU6uIdRjMCgYATy7W0jJ2CX0qTuDsp6Yxr + + ZeTAotrQvRSh4KkkyZSZYpXGIzjLuMelifbbHQ+ywNjU+o9bwH50iAovLtxDDEWj + + UlHjWr1VAR0BJL5Ma0CqkGjp9vgKuWZxqQv3kMn/ozDUTM1mqPzNr3L74bgsW1o3 + + nSCPs4T97OgKmnJ9bP+XwQKBgC5DY9gY7zapzbtlzBFFm9ctbgQLVImwBAd9bb8a + + yp5nPuSs+fvh54RwPwoIKxpH4yhTsvfaVhbXkpNMFTztbxn0F6p3uIerNHtWEkI6 + + b1gY2vw8UPkcZbrNzbtpXP9K2eLE6og1AUjdrwnUYkes2zOmoNvTtIv9Jp9A7gnV + + heWFAoGAAd+pZlqlxP+/6TR7rwPRRScufTKaRGJxsEcr+f60gEkHYbIL0yH7Aati + + gKsp4umaY4bP+hGfDYYNyiibguR0LAguGZSfx1DDaJUxIgSYoTHoWQWYibcyySUN + + uaRuiTWmWRsaAvWPEte9UmZ7i3kQMziCnPqh7feGbNKrc1+uf8E= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:72amudbwylfpsdjqfzjifywpey:lebiq43z33o6fznzhkr6hppzil25ngracqgvm3s54v4h2nchphsa:3:10:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:52f3eczj3vq6r3llloe3nxoybi:mpy66ok4hjcwr4ir6gizd6inhojk2bubjtrfkavenk5wzw7e35va + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEA2vTVaerg1p/nTfX0peth4kWZGnYMPgemUQUDhqXjwa5r6A1f + + NhAwXyp9Jd+cIDdr6JefXW2gW0trkfRNaHmMCPV3ZsNBFd/nQjaB3QM8mR+4H3QD + + kLNVvBQuuL8a61GXfTstdKcQKe7GaZ+Sm1H73d63SSfe0KJx8BtsAuQtM4ZVRjxf + + 0+k1EgFb1wkv4kShOcrVKWRduoOIu9XBGqqU4d9/QWNC3PMsYZCnLI2lEwrQAojn + + SP3ZCQgB+Mo4sxwDHIzOOWDW9OYSVTCTIQiSl6Z/vUmLIGrG8WHp9aHT19E660ie + + NwCniPEKK/O79XTEo2e4qKatjGCwdSj5QTE5dwIDAQABAoIBAAKKccmLXLWQ4HXC + + o2ajfxzJkvfAI+86Vn89MCfJWAXA2Oa19QNjF7SbAR3F5QFosztdOw+x/HjivKpS + + a+2I74uREaQjIue2k+/sQwCGD5d1S0UuKvZsZlPK5inlqdHOPhRJcgMXBzR9XVcP + + b3uW7XXLJlRWfprsL6dKIiw8apvc7zF1yUS1OAopfoOcc+HJ3GNMUlqp0kqtLlX4 + + HwXo6sVmNo4eOjJfllyTcUN4TVgzc2plSg6E6qBxnfiAxFwyyDlDuEFkTaNULPm/ + + UKOiniDWb5zf2sBm55dC+R15eUHf8rHKcH/wqmrPnTKn8nxzLSeC9qNWPDtGlZV3 + + j9JmEkECgYEA/XfgM71+9nQ8zZqJ32+ascITSDWvAgAtsZ9A+ze8G9+lJOB0MinD + + IvRxLN5nq68MjGrc+xZKY0NWfOAh41gbgLLvWYENKJ6AEQiDnGSDOSFBxe2Xc1gf + + BGaQMUYXWjbI8BoXG+dJcOjo1LxhxW9UWSpVgebNvnAUpgJz5E5jRjcCgYEA3SS1 + + zgELO/afzf2PeW83QbfFzkLsaTGCGgxwFXyeduHq7Qik5xfo7kX4/RykmyLB+D25 + + kmKCmdZxQQ773IUzMnMPOhxIj/9Gw+RkzACZoFYOZjmS6b9Sqb6jJBXX/PZL7f9v + + A0cTftaN2BnZ87KBf/GKrHkuE3Y8moEiDLbsBsECgYAX6MTnXIqraM+LfXZf80Ee + + X3Y+K4I0qBunU6RnjhxabMBBOEL9sF7N300FtH0G/t4qKLJrpPCjaGiyItpPfbIq + + c7aMNNYu7LSb5rezeu+95ds0dnMA2GEkoyAa5ceyJNTTgUKIyUpuMio0VwjJ/PRx + + 7MJgHItv2Va5SiXwdUx8BQKBgHIPHx4zd6Hj4CSUpU2SyUNCD+oEpn7TJDFfPOg4 + + MFtMxqifDr6KnH9Y48VY4qWJVdY9r9sKqCXEbwGJQupIYVGh+raUI/DxT4R15m85 + + 2ALUn/SluVqKbY5TXz2bbp1wQ1Vrq8xa+nkvHFXbb4i8BwMAh+/RSKyNDVD7TZ6V + + MkOBAoGAcqeFeUk5BFlRDEUB/34tiUR4ZwGzdwMgQ1RQ5uSVsgSHpp0ArFZCgq6W + + C8KtdvCh+hmwzF6QXrjcOrcHpRdOM1c1k90HOnO+d6CoaCDsyR0HSc6fIFYl8CS1 + + Mz+6Ugx5sCeSa2DEQeUSYwlQppTEUrDyjz8y97RR555E5lof6S8= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:araofmg4r5w2byo6viyya3oso4:6wbfrlkpzp2w22keeo5frbjirditr53g5oc3ku35swuwoipu6fdq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEApE3alS1Y+qPUVkfT9Jou7Pm67Dm9hikzQfEbQS+qX7pvdPae + + H9QwenTW6cfhMmo6vkbc8wqrG6eguctXWgQSG+rQroBu4dV8UD9lx27kYVdUcVK0 + + hKtU0eyDpqMiTGma1ILQVSM+/e3QZPRK+HmIlwvsOYCJSFGhMIPLekgYyVuxEFe6 + + 7olys2mhVNrCpaXoxubhXKE7dOvBuWBWs5A9Vws9u/11hGpXS96xzJldN2bDMyLS + + p5qygPyIFKNhoUEahGUD261Dd1hu6g3CallXEXIKl8CEQyPbFMWgJv1x23omjk17 + + UTtpd4QZsS6SZwVsSZLtg1/R2hDhIN8Fd45XJQIDAQABAoIBAAEQcgiCVS+2bPMs + + Hu7YKtKlIXVTQGuEi8zzC1qmPOPG2N74k/ifzrqUVCoKfeZuMrg1zEuUt5wDv3JE + + o2m1WgqtQDHJKi6zS81XQ8kBamBJCQZ84ydy1qdPcWDccKXvDy4uNLxAcLGDX1Sw + + EmY+n0hfLuYGc50wzir6x5AgtGxldX0GOCb8MY6mY/8mS/OSRlVGrG1KdQ5WqN3Y + + Min+oTPRhnErxHWvVikUdlZ63vtoGrRUWg7pdrXqnCkwxPH1ddyBkzPIIg0A07YB + + 8oJux1n3u3hO56VelHX0/yzFNkviH+gvybPWBJJu1krdLcRgqm0QsJ5NV/x40/QY + + osBcUpcCgYEA1Mzgj7GJ9JfFENkUxvHXzzSK45//DEOiW+rA2KziucHTZkLs4Kl6 + + EqcrXj+Yk0DbTypOW6uVKdKNPWl6XEkKmMvFxZQrL0LDEwAcqJzZlizII/D7fkE8 + + KMjExMg2K1lXCt50nqCW8PsyaSVpy0xNrZa7x1Iey9HksRDpBfczgAMCgYEAxain + + m+M8Eyij33XeC3YoA4eADXAdTSrTEuIvUUjWZ0Us1FbdizwniqYiVucI9AKNzGxN + + JRxFr6az/oBiiBJQi/5Qav4Iqa7G+4YKHhi1QTJogZ0yNJRQIO/CqXTbvUEN027m + + f3EwIpQx5JbxU0hKGyEhhEZiUdPReMbvwf2/R7cCgYB0BdBaCB6DcUxMx08AuVNE + + 8gzX1qAke6vGGdRTTs+/H+K22r50L3MTQHnwxRPXFYF9RD+802xchSPk2+GO93QD + + ovaNpx90gR4C+gimFf68VmY40mcMi1zVj8FY2SBPukIu9uL2qfAiK5NsqK1p3oxr + + nMd9AVUxI5tgvyuNyR4XKQKBgE1m/jvNgHkAMSwQvCNA4ep/5WVdwhu16XI7oMvz + + +gH21NdSLO+ZXuKsrEXbs2XamiyzPIKLz745ScMgA3XFtkUcEeHUGRBZoRJeKxge + + FNyzILmhFUgBzF8ZhOFXIbW7A+8IPrspV/AymFcrxNUYOezlzHpAFcB1clIZlUoi + + VAWBAoGBAM/HP7FbfXWQzWY85grp8fVi7FkYSaLdpgZeVUWCXj8YfkTyk+8gDabZ + + wf/rdHzjVNUvFEf287nj4M8mi4XtB5ywgFUvehXA+PnHJ9+55GeCOQOF5ulma0z6 + + MwfB7DKFKTfl7bHtGfTYJ14xVg/PtWFBJE7pnOcLFMimPfNWWCMT + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:tyt4hfvn44igztqh5zeiusggcm:ex3gzzn7byvhajithwbo7c3p7qwqxmnactaxxsxsxowkafyjrf7q:3:10:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:xsmblf4mfbwrri47s4psav35va:amlpbidxmdffbpreslrugvw55nhhwqjyaks2fri52ehshxngffwq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAuSBNunMdTApYjZptHL8f8fM+QhDWIE3B29TZFEhL3zjRgFty + + +KJDwPMViLL70ELTThuoSUscHyHAvFivKUVYvbGRg5WcgE9r4V1V/3pbrCvEfMxv + + RwNES+aYzSK1etulmzdBk0K+aXRQxe2Lm07/o2iQ3n4RjuQbYbaQzfZS9isEk+28 + + iMLAQ/AOIiZEiY1jGIZMR5k7xutoceApwzFo4e91+Axmh2809Y1uYx5SOk0/bv7Q + + XqxxXejURpevB4HzAyQiFKQcKz4CEsU6+SKr4dovvXdEHodaFUZzSl64sN6DqKuT + + i9T5c39KQutV4nyD134tdZy++2oV2RasLSphdQIDAQABAoIBAFMZo5qW8uc/26lQ + + 0Trutl3LFT7dxOjCTsup23oFy/0bSbvHETB30lcqJxfyVCQT4zt0IdIow6pb4eMK + + IjKx/NhF/a5l+dcFD8Wduq1QVRdPnEdzE156om05yYyH0JQiRdALeUWr18KJonp+ + + m8TvLMTC+wjM6X/NeFcf9xdlQ69ZMVEEf3Q7mzYc1L1e6SpaSVV2iTZODn6oGiYx + + ZPc4djYLwZC5+uC9gDx7pSzusAol74/0hg4xJAl4ak1omlVoDfviuloX4AEQDEIl + + O8tREPUjUOBIYBMpgDyKapqv08eGMD3Dch7pTYFKHYX6UJF8rjih2aA6a1E+Ch3Q + + YBijUT8CgYEA/gowWim67ErYzMXCqjmy2NBpMn/LUU+nWGw3inDZ17PLKdshXxXe + + dNuhfF365DLhH1Lded/nr7dLDd+n+IjMD/FNDG7xXJXPMZAlCwTZK9t817C4MNRI + + dXKliwACfjKt9fBiszvy0TP8Z9lXWtTw6SEvGNj8ftYY4BFKocpF6/cCgYEAuo38 + + 7BZQ6qp7G5epVyFQ1WiGgs1SzTdxyxdHpVM1Yt9Ya97/oVLaTeerKXOAty8Qh9a4 + + 5pBRnkJBqFRZhvSwXdRVIY2b7k0NsEfbVvk+fnhDSAP2wIVDFGQ6vpthgspeCEZm + + XkrQry9ZwG0IvmopuOw8EHtmvRVb5tdqzhyaSvMCgYEAw/ocPxI+T5eWFLLjb+q/ + + HB/7Z6fKs9mdIcuqNTTF+W+MZafU4MPAL6pXs9fUe0L9BOsqTKD83UOrtPI7ZLIz + + qoDejZ7wuBoiEvw+d3ewCfNzJfoAvjqmA2UEbGz/f1edeEOQAPFYayeNqpeymjH4 + + AAFHkgWjFD4aRpFQX+vpcRUCgYB3FqTaYPSOmP21g39Ka64aTXtwjHnLHxW5O8c0 + + toVh9ImRcu1komtRSA5vi5gjWBwJWvz10jMH/+vB9PahvBnKC/28SZW87dtLKNPQ + + FZPbUBJDKqSeCXPk1Ibbnn0E7QJR7f7zOnc1HdkBiZkHVOYFcmh1bREMq1HbbrBz + + mra0GQKBgAYljdd9NGkfDCfPNOhwVTXZz1Ro7kU+4wId/wckMPd95MyWvfU8E/Lc + + o24QaZSDb2VrRVJ1dpgNcSr8e4zVZ+4+urhQNsFItvhRJTVnZq/YFITB3EJCrZXe + + BI7jHDLwaimv6siVxbcJfwPw7DJaTbCAB3BD/u5pa5NSSVEf769i + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:zqldyhgk4msrc4wk2mbek4tytu:nc7rmvy5fhgxbszjyshadrvfn62rqh65euocyb7ltfx3qmzc6coq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEApLgLaCjEUy8x/xNFZuVGYvJnPKzk2OTDtvDaddCmrzTSn2O6 + + gAX2K3cG4V+NF/zk7A60ZoYjAqgziqk6ybvR5f1zxTk+zmWplhVahGox9iMi7Vp3 + + atPcu1RNBSCOj1usI7u9/+fkxJmML6EgNtz7p4W3ZbmA8udv/l5U37S3tEb13kFE + + mMKrokeTKbW9T/0YDkq1ukYziY5ye3eYbDqduRUu+bqmmAL5JPdb4GQATlDzHtvL + + 5ouc3if5YErOWJCv5ZbM/jPATNqPbpUQ5FBA7kZWIepcN9OG7wK+0aaVUKS/k5Wg + + +tTjDshkFAZ2x0MDnVz5L8qiC3+wIUbj4VKw4QIDAQABAoIBADlNaXJ31CyYG42A + + F8G++yiK6Y07HHWzx75JtcYMqyACgU8/s268JDJkuvkGc6Ansz/HscyE14MiHqQb + + UT9C3rdi37Z5vrawuTlj/lRYWT8mZA0sTqTURVLJ9e1VsSKAIrdfpa5z7qrSO+mJ + + 5RoQ8F8L7owt54UZLGXSTTZxuQK2qb/g0DvuWAUXe+WU9F2rv4GVLzvsuQf0AbRw + + 6UdIfIweIa3GU0u44FEoitXGLq+3O0ZAq/9UoNRmTUSAgAAS45OsKWGhYjJ4qto1 + + aVig4iNylqD6r+En6hbklz64h29dUiHdwOUc50duIarMnaDy2geCFHtkWAlkWJjD + + SBQHEK0CgYEAwIdu9AvSV4FKSxDefLbU/jTU/NkrrirRzezylnFc/xsjTYIVZOWb + + rH3R2myLRowBN/WgZUtAUwH2f4HwmJwcmMG+13RWYI/+Nquid48bGkNTUkhbb78+ + + LybV3mdH2pfRkbYlHpuZCZpf0lZWlPbH2WgtWxbaFH1UL+LT6AWcKIMCgYEA2wWQ + + ujP1CLDD9b769bJdDYoLMAkciAjtg2qMLLmTAfjD221tcEt95u7Xq1qdpaCaro6j + + Rf+0QFaG6BzgKTiZA4o0wznGJ74WDtKkaIK243MrOW/4+qSrRP+romKrdrB2XphI + + t8mr7bURtDxjEAwZcWSO3pyHdcPWkXejOTgIW8sCgYEAlfGknxsJ4a7HDrl/nb/D + + GIxLCPWWSFn+9pNAx5xYojIfh4D1apRMbsW7B5Mb0YC+fjeliN5XpY5UzS+FE0Ya + + G3phSGnJ0AC1Kxz3NohUwlqG7QF/fQODybNEQ6dKVduBkys5s6HZSZpaYHVvjyq3 + + sQGquVON2wFU7MqK4RxlZ0MCgYBy2YJBAgnV2suHS/RRbox5ExA2yjBZ7USPCwoi + + UdWSzR33LHSc1BlbRZd2VXghaAx0yHs5s5KTwkvP34R0WSdzwb9VODB+mqD6eN6Z + + pyG8N6JM5jiLRlpBPkiESHVdMb+Abx6CsZAkgDSebKQNwCp/WZnJhg9KY71aXoAK + + +yT27QKBgQCxw9dLlBiQLQuqDt5TQPkYzNSY3j2seEUqYMF8QSTvWxS8jJN5ofCX + + A/yQRxNyunl9AJYIM8GE+4CBDszhSu8CFeoE8cDhHSIMMFOR9dSEL7yXlaykQ195 + + C2iuwWcu1i9I2hWDtNz2d8hLL4XgEZxNGRQNFhC8VXEwbGL1dizZAg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:xymheose4rdlspgydkzr4nqkre:z3pfrvpq5fdpkoybhdxppwbzrt6ejf26xh6emzlce2sgquljginq:3:10:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:ezd6kflfw6qfpryquupyjxvg34:dbpmolc6skjs3f27go37huyn2zganyrgpcdijrqlhegvfcwdmvyq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAoNZxep7/aicgkAheO7wqXkoQY3FFMdTRxZNUrOEQ3Z5AAe14 + + ill4A8FRMZkT8xgpHzBw6bNDWO4vVQb6G0baM+6yZrzG23MVWyyKkiTjnnUdWU2X + + 7WxGgnsZF/evK2cLFXDU0oe/CV6JzqYMJbyeIgwdL3+OmqJfjvtldT6a7ZphaOhh + + i7IJSJFlb2sbdcHWZPCyfPHZFW+6sfdTSKKcn/DfR40lG+TYzVnYQfLQ15D7ZmNP + + EORKNzHk9zOYZnPXwJS8IyufjaEFUJLAguqVZGPHX212GpGW+jzc73gSC8oDDBH9 + + lzD1Rc9aeb59hGOL/LtyNsBArAqruG0h6RTH6QIDAQABAoIBAAvAl6Km3xFt4fx8 + + TAxv26WvokJt6qkxPJHECfYm7PFQqKsrY7kyP+mAVPM7lQBYldqkUr/U3DkxkE5V + + d+2J0BRm3uzQYvRylI8oskhq/yHbO2WE3LLZzE4o+gStEcTpXt82cyqeBijEWmv5 + + 6J3SSjjBK1nG54/niPV866U1SaNOXKPP4JF48+BKkNaaKXeYlA84cAttD+xmO7Tq + + W0PoxFny6hiGuDXYKsVlBnCujD18eNx8aOv4T9o27A4LJztklpUF+BuzqVtfhXhd + + CZ8Y8Tay55PKIi2qv/DLYPT0fjMC6cbNoT3NJdTl4LEB5NWk7KS3Z6x61ArPHdwA + + Em/km6ECgYEAyyrcRHYRBg2keBW/5BpIYLJEj4WJ2VKbB4jicc+wk3s+uGM9lwMt + + hMPHt5r3NihmsGABjqcARrLLE0Jx2qmyjWrJX2rfLKtY1ZFdyQ5hKKHg+ubpMpEo + + DwKOVZQXxOEfJDqUUrI8fM15+UUwgkBgh+dGqUb3IGdim41jIxoxiBkCgYEAyqmh + + w5pP6R2vzbvfTtauSCzhBQzdOoAzHY/aNq9FY/isAHVQVLf51obO/FRWIJHOGTQn + + l/OuYKQFZzR4wWIm+763shxmGxOGHQQMPs1JwJoksl9hPJx18O5gUZYhQIluI6zB + + prOXgyVeLqcm6Ios/gkT81J4XLxlNEKC1BwleFECgYB1GdknpJ2fTZG0nWSjBvsc + + sOOPjbqshk5RA3bxfnIaL3kxMhI3zl8YHPgqPamrj5HQqyV6oYspNLiT+0JAdHsz + + w48Z7jGAP6rOPiE+V4lssBFKzHkw6jWaoTCE5vzkP5WBfjoriAwRKyXYpSaWjKCW + + 9JjnzL138d8GJXI0s05FUQKBgQCFF1ebnFiEUDGnG40wOj4kOgzggy06AP0QmesF + + ZJ9eYu2aM3C44kVZxBhkj4IsS3SdCqpB2Q8Yej7uIwB2h13wj7QVbR8FAxJdNc5Q + + 5AJeURxuY8L4yguOWQ26JqzZtCc3mHloX6LNxpmOa8lah3u6rP2EGxHeXP7djhxa + + 7c0RsQKBgAn4Gd+IRyRU0Wh07FVh/+LuxC9Fc/GbIjxNbdodeuQzuOlU7auUtIId + + wVAXoiatL+sWpqK1h/+4YGb3xEOd8QV8NPO2mImXr6fWJ5VdZ0aX8DVbcDUCvra7 + + w7HwiFiwVLIGdyNEk6OuiaaYGyJyJEax8i3GKtEeLOCagh+//eyO + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:hnueoftricmvuv4q37m3b5mzee:hl2efj3ydjv2ydjk5ilxb3kwehm7qi624mefyi3ksmh7o5me2nua + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAnBWZCUifbysHRyel1LzvRgjn4gw6sQo8ifcbgqhvHx0GyU7B + + rAOUajUAzvCGVkUtbQPe2031Sx1LSrXkra+1D2yGXlQ/pyLJixUTwAkF+V+sbF0Q + + bR1TGztpzxQZV+W2SDi2KFCGxR4b7dN+0yZwXCPbZDYhpWfpo9gHBQAlI9VPEWto + + 8Q8Lv5iMRUFSgo0redIGWfY0lIH4+2/FOlOG30Hl4Q0GwzqXiSv1rGjx7fc9jDhN + + vxf6tdJs57MVbUf+l0ZZ+eh2aST3MzfCZUO6r/DIYzzauEYyLG6ImRImXnjAhZ/D + + i5N7lz4R8KE0A8VBh6Zy+SsjtXjvZeO81q54TQIDAQABAoIBAATnndc/l7j91Gei + + lztek4idyNxJhOz2yiJjaD3Rw/9+4ULMAtnVrqEsGLd9XJn96FibuEdScBHunKTU + + n0LA+dLUrB/vNvqDepYFsR5F+lDU4OgdKuIO5kNoZCG3JeO6oCDYCAtaGnNmcpC6 + + 5mpFXomwBm8j+f3cDH4S+1zSHW3+iQJiYkD5slH5nyAIWCYkGBj3z6gzOhCOuzVr + + 4/WJdXrrxv7zENUwz2PUYe8aEhtyn0NVayCnS6oxdONwUowySPtLoh8G9EW8NQb+ + + dbBehYK92PL/XH7zIachSdgcRvoXXzKSErhFXdVh6NM3wYZEFVh7yBGWcxN/453q + + JAWTvikCgYEAxk9VdT03f5jM95yHhBMb7+E4GWtt1iB2hfeS1hH6xkPtmBUR1B1+ + + +nPc2aU0kv3VGgzIElUWOrZndf2eLNbNzslfECnVg/8EwUqZhFJjlS9GvpmE4BE6 + + /z6kSt9locLP1GvPllhbKm2yi1uQCbPrqQRL/LscJrubV0awDkCdx1kCgYEAyX2d + + wCc/HDuvoVcHX0Pk7tl4RklShX3mlHHvWLQMAuiN26edH92p48vscw4s8DBB9K5U + + 1mqA1civ2f6zZtcIvqoerW9vxwSpqVrDwq3HBTOscuip4aYbIOnMe1pLabjmsrLn + + tP5rkgJeUx0cbSfCBpQjxUlw1BsnM1qepU8AThUCgYEAvSjVekRPWO22rYXomenk + + Xxc0fMLFfVdv1u/FZ161F0OaMdP/MpaEFYBJLG3yTTfEetmwShRRZOWyoJCvvVOT + + 8uiQPgm5efPaZEm1T8uK47W5xHsJjPXCkc/9xNF8zyTVO2kvFNjo9Pq4MUfAiBDP + + /GN12/farXOMhF6P9rhaB9kCgYAZLtELlhwmLDOMR7NNLdAsJhQJPNrKgmzSOtc+ + + T+p8ZpJsVKunsu2r4e3gh3IIZw+nRC6oSdFmZtnLtjC39sJKCjshVB81UZje6NA0 + + wcFxHf88sWWiJT+Ywn/jHur0AL8csI2TKoVJT3B4lNfbsK9oYRWDb+VhLS+eFIJl + + iNUx7QKBgFRzMgeWnmVHkdMt4WqqaNh6GEwXM86Yeaw3f9WLLKOtoR8QoVQukEWC + + DplFDDniCfBfD+a/NoC+a5azXI53NnL1iN8t/G7f81xWgZC1y4yeDBqNSyhS3vpo + + L9QHJeP8AZ2cEsSxKmei5+zHuvpN4HuvndyAXuWh1V6TYSh50gVR + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:xt3owduddxqodfhp3c2fu6yzr4:bvk5d2igrtlo64kbpyypajyi6bjzrnvl2blcavxhguiupjthelra:3:10:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:zdubpnm3ft7fapqny3dzeypowq:o753jes342uzajcwt6awhn4rmrqn3cszsth7kfd76zd4ow3yc6ya + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEAu0SG8FEKO2y70r7ymRrbI43J051onWTZGOZIMga5iRApsZxe + + VGIotwXn3+3SkSCChu7Z8OnTx0iRJuAtIi5uRaOzfzFfDqsOulG/Gglvx5kRDVff + + 54RXY5b9kejnLu/uqBdanMU/xUmaOXumHgYUdERxKdrAZhEyJ5F/AhINA+kgwexU + + +pGBtTFiamb5S2gqfxZ9MyR2LZfjbAvcA/PRCGcs5w+j2Kn1rSBmIU2c8uED/bpz + + lEhu7PTB5GgQubsl+1PYwk38kSqDW6UQiydUKhCVwqXOV4fbkzDVdmNarmPToZJB + + yfY1R2XNRhLShnHm0WPJaVAq/I1kToKUUx0btwIDAQABAoIBABsmvmHNfixLgZf2 + + s3nbWPZ4slCKPAbF/mwLx1/pdbEXtNPZlhup97lBk/L1qlf8XLBvpQ22+Uuli9YV + + HrYcAUT7jSTd5ahcyM/e1lRSFfDckopauU359CmuVKl5GTvG8dVRPYQJXUufdkrr + + UJR90S1iVv34h3jE+X6fK8kDEPwF6vcDrvIp6Y/coKzIiyWR4Wjc9CXYonLfF4fX + + 0XsHV9cVNQ3RU9UGNn9hnH88R3f4YCBqJqh77qusUHW+RXy/XoHc9Fz3Lj7kGcJ7 + + CoYBNwLKU95fdi9TRIQsnJiEoQzIb0H26NDJFjYDPqLCoj1C4u5SF1pT4WaazZvu + + RtjHaGECgYEAv2mybf3RZ8HA9J6n9mOHOdU/5/q4GwxEj0tsIVAvf9WdvbXgDeLm + + xuXw0j0N9gfIBnCcrEZ/FhR2uJmQfN7bpA5IDYrp3aht/amavkgDv98WcG9RYJMZ + + aso5RxI7aAJuJn7oN62fKkcCUS4S2bMrTUzYkrfcaqZLxBRABLctIFkCgYEA+nTE + + VG24gt40Ogehs17u7GL4xYhB406LyZ82rMcI8PN/4TxUV/wQyaZeMKtheMmWGuV6 + + RHU2l2o4alW084ZAyYD4cY56nIJnC7AUNXXZrYKaRP11LMNCvtK+T7HE3jY9BE7Y + + FrpGXbyeMz5G2wfV7KCW6kZ13C58IzLF9iy3Go8CgYEAmq3vYrMZ5Z7NLuCHGrST + + MkkBu5T/8duYC7QHTWRe/g7ByeyPgqk5lMF8OmjcP1VKbunRseXGDTG8PrDZ8g6l + + r41a7Ja1JkpVmAbW5a2MWiENIQ7T1BcLEyEX6DbzirlsCe/D+Dp1xNRdKvzwfrwq + + 4eyXlvi9RfHciDdVBHqCHQECgYEAurwasZRI8JH5wJZ2EoWif+7e6nBIJ9ElWkNy + + AWo4mWYDn4xammsenSqEqabt+p/aYd1cxvPZqxUQUP/r9XHQliypkAkaE90KNWWn + + +6ANl1d77BpJpgFDn4EDUeoKDV/FKJQcev2Rf0wla7FwJNh3wICPZMb6Exs5hQjT + + HlOChbMCgYEAoWGCOHmr3XDxNKEju0R0JVuOod3VkhkNwL2l7P343QOOO8lfkSeQ + + F++6HxzYkR/50JuYS19bUNS5KPYrJXqsG7HT7St88os8ORcaHtmmORf4UlMoJkwl + + H+Yi5PY0QpBrszST31bgfqdoHKh7i0BW9ux50XO+51GUPVwXQpayX74= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:xps57pmsgffe3kshaz7ynqjity:zexdamdswofh6v2t2wc5estpazeirbynhst4q3k3ffrq3w7xau3a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAnDNgEwMYgFqRwwZJv5J3wuv4qByLdSfvHKQrLKXUjr2QMwFF + + 9g8ohHmrV1toiqIRQDiqxr71WxCUMJk/84bBdkAoVGIM3jAfl/q1jsL15JtFPeQz + + mQoa8hkWQ3GnxL3MAnzEi8knIpmtJkW/npG1L39CTYt33kfUbm7+Z8VKNjHdEQ7W + + qsRxfmxz4CCkHQAbtL6dZdVbJwEi6Ea80/jyY6ipr4+JqIhtGpksvpKhfhpPnetL + + AN/aX41amGlOE0EEmdjXi2JhI28+fYplXgNR+sBqsi0bVmQZsRb5dwVpfbNjZftj + + 8WKEKB/vKvm1UlmOTxCCY/bCW3QAYeSStV40HQIDAQABAoIBAADFFA0j78P6Lku6 + + xTRHgYWZaiFR+rH6H2iRupC+xHxrnMFTmUesLXPxsZF9ptdAEzuwy86s9EKdo01W + + BAWsPVna2RgJX6zcqdsy5iAs/88/oKi8bjCr5xQYYY61ibEjilTczo8tz56RCVRt + + 9ZLPfwgb5XTCYjXbPsXIkEJsq3/23vg7ji2Pyq6GmhrSB+mxe18u8ggwEwL+sMZu + + 7VFAXoEkJ9Qa6AI3Vwx9/QuGs8W3SkEA2MiEjYWrVZUYSYTdyQ7W5b4qnFPBj3GF + + gDzsDbNEDNijyW3CJp/SEfqSZm4/3wmxIIA3f6Iz8jZc1Xmo6LdwMwWOm8W1ltDE + + 3J1CGNUCgYEAthlbkmf55xW/cw/0OIDcMkaiQb4ld5jdLrVz5ZiSUQjpbeO8lIBL + + epQzSeTNanJ6p/iI0xZQ9kSL/9kLBIiVMqYhCFsnzqXcd0TX59WQkqhh/Fup/nCk + + L/Hl/eZvDg14QYhBoZBsuWgfgD4LIT2+eIPFtQxv22MJoBWybFy3PYsCgYEA25di + + GV6OHMhaE4AENe8MFUlmsFq5Pdp2kDySDDFYjriKJ8Z8ejY6XBHcWIkg6qCTykld + + 4dTkdPg++bbA3zc1yYf2wN8bRVISOUlioafrhGsi5kL9HUIFWxtfHFgDutMQGxRI + + ROFbXAbfm9t1cZvUpPlT8skoU0zvHKU4L8MV2fcCgYBrAWWlF8Jq/4Wb6KEbXuWG + + CampNkIwEDzRCMGNBmXchn8dGvkizm0MH/AvmOr4hUL8V3iXigKTZF5cPr9Rr6z0 + + sVix31b6AM8XqvWwfvfQpm/F6ltvb+ObZOtAkttph5LF93qRpRuuq7fvFQZXR0AY + + 814HcMJ+SalLT9SkBquK1wKBgBykLiNo9dhDOZx5ghMWztin7kDqVGcA6538iIAW + + n5pd74comGvITuxbWAYkPKrdrukfkKM4BWRMTMp9T8LNjLJwjXqynvf3sHDQZZD4 + + OfvXjYHDEwiR5+juNQWZZUMk7GDb0GFLk4L5Uokdor/it2WdL5nnKt9SlY2C70Ur + + iNoZAoGABeXyJCB8iv0+FoQG+UERAN1q/z6ycM1CKEOoaXlgWbX7bV6C0CNK9NFN + + IcXQOwahrj0N7cq430R8tmgugKp37R7mFW8RB1B/nx/MFG4fSLduuNZ6/a/vquMP + + k88UQFA2FX9bV+T+NUIiu4BQwsNsO/vVENX/cSAZWOV3mTtP7Tk= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:x55owxzhsezfoayaxe7jpwnove:vawdgtqpxyntgy5i2po2twgelrynkfcjgwm7publnlbdp7hpqmfa:3:10:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:j64uavihuouuyskf24dua7pc2u:obcjb66mh6msejksq2b52dhz6vffzxuvxjnoxvc5eq6bp42zadrq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA5i4eDHhy6sVcQaAK1wSU0kjdcM65SS2aB2Rl+SI1Y2o2JYCA + + MdXYdmxkBJXkrrZQ3OEOu/KTms8ovYlQnN0Ayt+9GuUoD8x2kkGrry/bIxwEmTqu + + kSqmPbiloRytbyfxffo5k4+APjm99AfnvHeOaXlxSy56dzkQJaomI6gtrQqlLLhT + + /lSPlackJd7Al7umpBQkX5NWBkqyEGT1xV+9Lz7ttfaaOeM8WMG0PJBHy6LxqpFI + + /V13kwFNkHw5FXaYzsrjfSBmCOBVPQT+ZmAd3CRNs5oxtSldKa3br07LgNRvoj4M + + 2A05bCiNoMm3NO56zAltjXBtrd/l3ySxdbWHyQIDAQABAoIBABGTdWtt2haHrfD7 + + 48AB40xAUJpfyqGmGAQW/DtfC5UVA9/utTs48T+vrJ52BKF7neaTz9B1qCQyy9FX + + Nh7YOEqFdZbjZyD3s5kc5xtoK9M9PTOnGbPPfiSp4AnSmwKpGeVM8U8NbtUxiwni + + faU0Ot1ebtJ3ENZgNtWtbZ6c5an4CEcxTjug8Q2WDqNmLqsGyXRTpgXZNPIFLDSj + + rwAw/gfJ6/9vmsxil4mnr/fbnSL9/i0XCj4y9vvc9AcwX+l7v5MsNLAh65169Gpe + + SfkNcngcbVWDSIlSAjAJW9lJCKZtvwCIHUYPhX1lrcQaEPLzcCYnlX7hg5ogEx+o + + p49JTwUCgYEA6nbV7BXTwuxAUNmog9i5Mz72vydZSyWPDk3r0j/uM1IdXKAntuyw + + lNi07UcpjjoDXSO0+YtIHCpr5HmE7gV7FDutNdG53mqkXImfkSiywRM+EPF+fOmH + + ajEsueZyi3erqJRZrsa7b7HEAQQyZS54x1I6viBo2m6nFsppqV6hMN0CgYEA+1KM + + BOXsb67vB+oXDc/oBEBq5HV2TXjXQK3ZmZjOfcoNW6jTpXDpJXXiQoMWfHT7W/GG + + DmNNJYytgsNUfsaxTLCyE+oCsqvgbqay7JckKNham8JLR36GT7cV7TN9RMHDTKKi + + 73iaKLrbetVOgmFLP7Qwy7edhAvdUMbA+uudrd0CgYEAxofraeWtkr7DUvKKu2GW + + qCrnekLSXEwoTv9x8GzLwM8GJ7lBB6ZxewfoY4Y/TLwYvxQOGMN0Qs004Jh5E6a2 + + ahKB/zFgBlIcbHLoF1zzx4MIqgYiiZigXi3XZm4Yjbm+M5eyPMjwS4qlogqwtXZd + + NMGPFhCRWGwbtbOdNpn3OU0CgYEAqFg72FAXFxxrmraQKL1aIfbwYwXXb7+BGB8b + + wgocTyAX4Izu8EP4uBIFtB3Q4x8M/CKFdH/JvlxEIXIr2BvJyaAWOMaodfwxgo0B + + Dv+SxhVeZDU6bbJvz1fJRTEXOQY9hsjuMVBsmtnHiLj3NNhtKkfN47ejuD6mSaRI + + wgsvfLUCgYAe7EGyWS3kXBXEkwRicBjwPi4kwPfxHTXz64vjFKj+NbimV2TZ2O3o + + EoJk40dOQWZI6GYDJJnNJ807MTi5OwC4rjgxc48mCb44ZBIoY0BUwNh8clpiFCJd + + 8u3/e4LmEYJe5AFRT/Nuz2xvRpnZqQSQAvrLB60U+6Hmu4ToRMv1DA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:n3rxzmvfupy7vucfjfe4pkdgga:o6s2fbq5fryvlt2vbno35pqtqj4l6pjfsf4d4es3nz5cubjukw5q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAxJKzLV9c2HRBtvz9Sh6ZhLopsZmlSaN5VmFY4IYF/t8KMFfR + + hgY66UseCV+wFwjjiY8ala1w6daStW2aP4W6Y2TUvgevlnHTzWqfP/Rekeyyj8Gw + + S/GE7wieXiahP9OwHENyStN8dbWkmvnIrYqBiPyozVjpavYMRuhGPjKpHMNXSkr1 + + yYpeaQ4hMxosd044ktj6ObE/ajBBiM4l3uhQzwsPg6rjWpc/unGPmXjiwOKB5iO8 + + YZrUUvCMchBg9oOHyf8ovjuWB4NU2yV1yhNVt+xbN89hJlqzilhCJwHMqf4sIbUa + + ScPV6AycqUz8pjCqPWOvTYHms4jrDkuXbPiVswIDAQABAoIBAAyyJuMi0Ppkg9Ut + + ZWbcCvFH0137Dzs3Z1t4hj3IY1iaIjWL0wslvkq+V3wUN/uqmDuUkZ2iMyr2C1vT + + t7u92gEF1aZJOYJa60YpOB6VHIrTOLxQnERDaAWiPKex7E85hmQgWsTkAFFbW6EQ + + yfDtJ/YwqsoTWIUzpuQNzJZ6PZbqqNlJXNt6nnCqecng7H7Pt7tNQzQ+WA/WHjnt + + A8R0e5+fUFUO7M/V7PZe40FdtatNGOv5MIRzZfkVvim/0BScd5wnyhRQU8evph9q + + wopO/r5wQDlsYIBFr3AuAB+8gzlPC884wdK30+qPUHAkUIvzwYLbDYLVnz96q8Vh + + St0WxD0CgYEA/nDTsY6A6Bk/c6fj+Aj/i0RP5F1bewED7Xr1el5ZhBFrdAvVSPxf + + AGM7KG7LCi7nY8d+HZVKljvEp6tDFjrWrDW6gcPmA1Att4ofQvt4BA2djULbtmNU + + uR2tkx1LS073jK2u5qRyO1e6BCcK2UjGh5EU+4A+ZYLSF/0Aozxo0VcCgYEAxccW + + tJUQMphzAE+rRaCrkVeU+3yR/LLK7Ob/x8P8n3OwrJMQr+aJWK1MRrmtmzMLnGgo + + hqzeaibCC/1ncvqKpIw0V8tYxMEN8I8svoeUQuCmUF4gDRkXwEJfheE3qc5aosE6 + + QnO1CcSRZnod+ywuwTK0I9/OSNr+G2CUHa19GQUCgYEAjWmXvm89JcIiid0dzpTx + + si1dWcapOUvvKuXT2RbnGYe0+OI6wD3Dbyu3jVlGb3pyD/qoFTkMI0NEoQuGVayN + + 81hJOCXwiJbfUcrqZQfuRBJtJj2qb0v1oozkE4eMeWaCHyXIt1deRa0ULYqldO4F + + qQLxbnZwN2rl6X8sA41nlDECgYAFs1xbLiS+YJiH/MPiCOSJFu4rZYbLsteYhnv+ + + 5Q5GBk6kWsTTXSC+VphpPXbcj1cZVgM9BoSOqLlVISO3M7OFVKk5kpnnae0d7vKK + + N1w1pUYF8QCZgAyoNQGN2VUCZvlD0a/9NFqWgnzyaDivAbIDTZPVqODIRs+mOF1s + + kZCWhQKBgQDIO9k69EE6VDVP2iO5emq6A9+9QegnwQlFF7iHN9PaKYFiyHzFueB5 + + eyNxHSuDrjmXIBXXHjAbX+twD2gLA6+xeORj2yujYcUCVJ5G21/FJ+7PKFdUPh74 + + IMMuQtmXaJw6zwUUsqZIGxllv82zcnfBQbXzInue2+081BCPh6wn5w== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:fe64krzyaeff3d4teunjbetkzy:27hrywwaffqiqcgfkmzwbot3iamotr3bey2l5kaladmdmxuaz5ka:3:10:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:oibebmzc5klthxwje6i32qsa64:4jn2csiis5vv6ix2qndrvegu22up3a6wciqg2rrcbf7m6sxzxhya + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAn1VR+MsUI22ssr2wErUH2SszGxF613S5wZV+MY3I+5E3xFn9 + + Mwf6CHMiv4sdNTnU2dadtx+lF5S/MP/bpjqt4shLF/71Sh0uNktvixdE1gHm7nKx + + oUg1huUgVgXV4D8cpDhscZ8CSZ94GMa5JXB6s7e3EtrAMox93P5qoBVYNUKWRTyQ + + YZnYvVHE1xMZl+1QBxnUBGtHjwmiUG/BfafAqVYQyd2e1hakp2keLmk38GIq62gO + + 4y3dAUTDfImlENH5gbMiEHpmUve9QLxWBRDqk6VnMc2L1pTk+DA5l5xFrFPCU9yv + + I5M7rjV1MFL64SA4+WmsjaqCv/VLkjXT4a72zwIDAQABAoIBABYRZiIUVny1swaq + + mRluM2ETx6dHG4F97EBwqSLJ5X1aVqP+ZsBLqYjEEZr/9JKrqNxnCj8TxfTnKDfs + + KAr086KGZUg0itqyAfWJKzDTjzgo2UhLYGjbLHa7g2gGtOGzPA9OtU5jXJi/2o1r + + 8LbLxmLf3h5hZ99YcBJMto3nhukRUMB504vpl7TIRJ2K2Nq8Qn+9oK+WkZ10emsr + + gSPNH7hcZntVEFSwPwNT/xs75QnFT5wZJ1+RqPfCK+kPocIFsGSmih9XZfPeWVjz + + QD/uEGcTl8fxvxY9pnwp6EP+NW8QOvcBudwK0qVaWYPE8DtSHlXYOLX81ZfKqKhQ + + TTITPiECgYEA3FS0smNgBbFjAlIcr1rLBYpJZRCqC3XEjpppu5bVeRjbhEdJ6BaN + + g9VrgyRiIK0DykV67ebC3wgABsuT8WntWF/Rsm/jdr8Cdyq37bZLP0trRToKJekt + + hEnE1ogakMSydW8sG5fCWUNrmLae0XqmzkvE6D46WcLuSKBYKqmi/zECgYEAuSCo + + PmYYGqwK7G9C5AgjEvSeG2FRHxruYlK472MMgR0C+NFVQN2yXqAZWGN88bS8SIXd + + sDzVPxU9+kfGYcm2HFejQSbg2RevvzXJCMAVY9bvZfqKXtlGMLaH6puUDgwbMY7K + + qwSIzlTf8rI1yIsZrT0gI9QXInSvro/N/nAv1f8CgYASqKG80amaEdGeqrF/MCMt + + Tu60PlsIKWsB4JW/qyBc5vwAEcFyhCZr2bEHJBejSMOfZ47ngrlSBe1qpebbdOsC + + puqtP8h1j+t3iAiXeu6YZ5yn+ihN2ZdfMpgWyuPlCqNKSqXjmFB/GrSL9Dsy5j4m + + DkiYmlx6qYVgZSPSSRdioQKBgBMKteN9MtuDeLgrFZFI+PqZKK4eS27MoVqBsb4F + + zSJ2rniTZ5Z9dzxecVzzFsXx1jALfOsExtZvQ+m7ej9StSWjKgqoihYqZoxfZuc8 + + gra7Q/KUW6k35g1aqQ5LpGXxftaRHm2K0NuQRVy8UeXn0ONN10F4Lkz//ZYR+plC + + RtlXAoGAT/+tvp6kB5UqyLWI1DNv7Cu6jtCyAm0IebguHqf/I9pTLH2fKLd1vy+e + + aeTjxfUV2CiCzZSMMyaym9hf7JNR1VzVzkwt0Y5L0DLhrTbDGdgDRV3nI1GLTXz+ + + Ro+Go/k+Ql0hJb0FF9CQz1kWDVprTooWe3S9llqMClMjBKkMPMY= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:nmtnmr7nerwtcasdqjo2mwnxwm:uol7bxzbeeiurj7e4bmvkvc4izwgzsurrxm326clfbiseuzspbaq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEArLV+zMpxyAS74Gnjm/bgauAaMXK76/Ph0vy8Qj6b3zyoKJKA + + m/3Tm0AbX9AAZnxF7hkJTfxdQrdAvXv+E7xqO39NCaNxNqO011MI1wgY1FV/+2cH + + dwITBj+Kc+Rr1zNoMBu1CRQriej8rK68CFpG0OwKUfRbOX8vpIhzaEHtPN4C7NpR + + UFEUbPOQsdfNsUJzzB6ilZ6vsxd87DzGoS7zbuFQMmBjt7+typiWCD2jEvfXHxcF + + 6WH3EkMwaxZB1bmtPbrHe9FnzPP3OvP1zxjjbxsvCnYmxt6lyoN1wFTpCECIkM4r + + Qwz0rTVcgMfApXxg9EWILEo578qripethPURXQIDAQABAoIBAARUr6o/w8j8gkqs + + ftuVaLznIA13RK3e2XM3CRsLe98+6sBaJXOSKAhN355MugT0VEKWCgX4N3gGM5Zz + + 6nW9dRC4/N9/uRr+X856Pkir4weBYSNdytyEYzASpQyKJGtAHZbiWhe/WuaV6Vl2 + + hHccfNzkpJZGExdRglFjZlV0qxfjNostFNHIv3EZjqpLgtBp365zMzga2nBhshhN + + dMRN3zI/Wysuzemfz6IC25F7Yq/5HAwRKvuaDc2rJaS4Dn78WJSk3TA//8KSxE4r + + PypI33b3ljafExSBSIB9++C04ORKvhsc50BYPfw/g5PyXIoSzjKHOOuLFwVEPsVz + + 9DQnRzECgYEAz9iKWOl4z8LzTbBvw1udresxMJ2jt6uiFx1hyV8OXy4MulboMBE3 + + LLPOl247/zyWbw3FdvnUs3/ckPh406N1IVuSE3LZXw1Wt7sael3mFYT6RVD701VF + + PX9Bq3xE7hYx3/ALW6k3H8BTaVK44SRCd6PZQn2wKtdk/EDx5YJdQDkCgYEA1Lj3 + + EP3yA45nJRf3Z/5RxeOGYcOGS3Htdgsom1AQnK5gNUL8lmott1pEcGuyQSq640je + + /HkoFcqFvybQ9W3TGv2rsYQmShFbkHGLcD9V7XMOVsLSov1MpL50jwG/pTDA2yOc + + cSmH253V0V/CjcamAONd0+YBI0ycIY2KEnRE0kUCgYEAzw2RrMdQ8e/svx0gCYaQ + + Cvz8cMjpmoRhohNEIf4O7CSMy2jeP1w3EdJB4TsQi9DIr/MRHtf826BpkwXkIDl6 + + 6vM1DyjfgMBh/gBnfTVji1aAl2L4q2wL4RqPygyvAlub7dFND1AAOSI4NfkRcj/T + + 8ymHuqRJRjRzRpRQJen7iYkCgYAI3HOeR5XPRB1T1D3AHT32ylWMuQJdHi/QHQLi + + BWHLxQ/I6DNxaJbi7mWvcS0JvefvE9gGGF3tGnSb09gcgSisFSkTyfd2WmbAC5rN + + YDYKICLWxmLT201YB37/fgknrnI6Lq+TnzFDmr2PbTfDhCTiIJaF/yzI9aYDV8wK + + nMFJKQKBgERFAoAThF/5RxZygP5Cr2yytKde1V6K6tkx68LlDct2ayQ3NVioz3TZ + + g6nZzbnYZye9UxFq9Mj29Fk5KRjC2M1u8deuxBccFwsC4Tpe+YyXcyqE2nyaymcc + + 3HHpX5Hj7T3pvHSgGAA7bB82/z4082OxiEeUnzxPfhO9YY3eBz4e + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:gvajllsonkuscfemygbnqhq2re:uwyilm5a7so4blhsaielnf34u2qbaqmudd73opjkgodgg3okeaga:3:10:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:ghiqefrydh4yklwo32nwo43ebi:vszy7wnlzofynf5nswobaym4emv4yzdhwswmhoxzwquimn7dnthq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAxHHC4JknMYBpghJ7/ZyumMb9aDChLKIpFlACpvC+CADLX4zx + + lJUGu5iTIQcFOi3oPuX6rdL3/d3dhuntUW0Gw3R+Jym++vrIi2kMzMuTcmQ8PjgO + + 5jNCE/4hKdWSIZ613U0uAJ5inusERXBaU60P2zss+2hvTk25lxkkRtNQ8OQCwXk9 + + TjWhnk0y0jW1vdjYOMH11uHFcEG7yIcvyKR+a5jZe16XMFsM5vkhMQ9RhoDud5/B + + jj7AiJzWc98lqkTuEfc4NzQecNn9hT93GpqjM0yC8re2Lou4YBT6nWlE4z2n0F+i + + 8ljO6mDrwFO8UCs6Qu8cRzsFcfp9WR1lmyw7IwIDAQABAoIBAACFQ1HwYJ/gn5Ge + + VkEcIC5RdgHHrIr/ZwJ4dc6sG/ojc7vYwMR3B0yJ9qHYxepwjV6qogPB57GphoPB + + V5qmok+e8xKhfrBlkmXO18oseUM4AXIyGIAC/21+zTxcz4VSnq1ryJpse7Brc63H + + bXCD/eMZK2EDLCsAnmRIccXU8Nr349ndSmUAbRVXqMW4bRC8qS0d5JsyEvHCbHPD + + vo5xJCRYdDtxm4uVML8JcAxVFLjvVWe+9XoebtfYDe9zHZfgkRrjTRuzWLda+XIy + + KZDgDkIjm5bNMnjuw411SB9vGIgbYF8WeC2pnZVuS/o7b69XxgxRtImYDtt1v/fG + + tBWvVYkCgYEAzUxKAaXxoPpkIcGNA74PZ2F/FEe82yJ+GB6vM4nlF3k59OwGvaxE + + Zz67jGMAZRdIbagWdQ6Tc6FdBe5bp2j34LOxUVFwU4bbFelBFBSZtFXIIqkCzjLD + + 7QWmLrMiHvrsND9Xlu6+esFjQl7dPb6y/wmFurAY2rPatON6Kd6MBGUCgYEA9PW2 + + d6oBDUP7kbvaJbhzlIv7DyATgt8oDoDFVOg45ASnvuAprYEJ4Mbs31b1SsC0UQf/ + + Y3pllTd+DTLjvKszCUIobQl0j2g9mbkR5qc8rrN1DaCAavxqNiSgjPLM2XKGy9Gi + + bxMjjBtoqw7Ln1LhyhL1I7qd0QrdT0zY/zfU9OcCgYBHCj0ZsOiaAcsgey9muh/u + + cChfRiut0JO9mPCbbv4dT0+k1v/GJpRM/cI8ZA3A7XucpmuO+gpAGvhrkv2YQpRz + + 5vpW3011OdcaD+r7Hd3KL1zf0Ygs/hgaLrhAtK/79GxD8B9JFThIlh7Y2qbINPMP + + maXy4fjXxSDLM2QUlPPymQKBgFCKaZA2yVm/PHvSNAuq9fWlgMqcVU32aYk7NaaR + + JAN0tGLB+XIet0y8my1jvgryCVeLNaFToQrK0Bsu3EowT/t/USNotHZiY76jZwtb + + eUxHnPj6CL8kdxeOO2uceVYVndRt/OZgeJOcf3Gez7x2195FFWzF8xXEaLemIMLp + + bI+JAoGBAIiVzbyeGxhf7aCqbILLUTGxb3yLf+SheEiMdVJ/CR6bc8uNcKKH0E3y + + 7ygPXZpAiajpuSfqA9e4rfTxHJbinHpV1yxOkH55QpPm/4h3mMupthqgv6dPN+aN + + PcOyLUGJiFlXKXKHMeG4YHHHLrEOFxbKsqzMrgLWANmg7c4dN9Px + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:unhxjfxrkuzsuds26fq66slezi:bqley4l5syeh6vyws7chsveukz6rytkb2ihrquvsvilbumohnrdq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAvCBlTHQVDtHf5zH4GvRbJxJPXfdpQ9voK7dqmz/ggmAS5bzF + + z78igUXiZT1Z4AR6wWgodyYnXHcl6nbpvSPBJRrVD7eI1dBmjV3QUBPAoQzTYmzD + + HFTLCR1wYQLS768Rrp7lUt0S5WHU0a+MxslcWNHi5DrhxKWUQ0eYX1t91+86l8nS + + B1CfhEI2stSYlTFj5vCI8DhSYMxhZclqgSUx6fz6RFmqRA5zZ6ENzH0D4BktOFHx + + G3Tx0Y4LrDqU2U1BmXBpQKzabJwLwXTwghVGI5PgaLEPwc9Br3bOmVsj+PXH02Lj + + 4vW8YCd/Q+CfieivfUdhVwk2PNWXWyiCpyNcwwIDAQABAoIBAFhJqdCd/83zL+2b + + 9VCNEgQ9oxK5zGSE3So7C2Rtr2rwNJ4tn/X1wPdDOVMC3l10LLn8rFTyinFqF1i4 + + UsypbXkA5THZk/WoNqCsgNk70+ChGMktuslef+S4tKdKgHzsv9MgDgZ76uTMq2h2 + + xw35rQWgBqfOfGrhvDlw7bD+yoneFRNeiIwphYezgi1m1fhtQFgAT0JhBqKCJWPu + + KrB55XmZgc0dKTvp8Bzg9/KnhV9zstpeScngbjb5gNgrWqSG10SmBeApYQdsKD3t + + hFwUEb0To/8MAtOt+/T5lM/MIBBoU/wyy3Z8zQgZZePgwu7NmAg5Z66p/MGWMfDP + + ZH2Ayb0CgYEA00xMPiXnt3NkbRl2eByVJN9TmPATawagV3yaiwZSnwohgizb2osM + + tkG78UAr6cOA5QSg8KNHCddPO0Wn+U3VVyua9+ZH7u1gdjH4ApnpQ2jJewmfVItJ + + EKeKd8qX7m0RjU1IRmTsgDveABdTgcDdHlc8D0KjuZRTHFnHt/ZzLlUCgYEA4+0m + + 1vliiIcM9RxTEOiEZsWnEsMJBBJuD6Ukg3Et23rZKhIqLcCDWv/fb7X1kaDVPYsO + + qPr42x5b5c6gZq8AV8UhvDqxOCY1MuKnWOzAGleQTUkx+BOa0N3LNIqCxSzvNUek + + e78qMhNLnXxXuRiZtkOtG7w+3vlhc+0exqmaRrcCgYBTmQc9O2//A9eC1qUphl13 + + tif0BWAZYwjDNFhMktbTd4WkZC0jvQntffpmy7XUCfaQJZGrQ15SxW3ijH+Vwjab + + A3SPifuBy0bz3Hc8SDqi4e19EWSJZYYl4bOGC5Cq01ozZpUmzL1JSuZdcN0oI+8Y + + Fvl7LClsvgNX3ymGXipZ9QKBgFfcQB+YTJpSbPVDcOXQq9EuGeRKmHwgWprfTv74 + + LvQvG+1yyR2P21LF1ayrWLlFZU3u/7y12h4lSsmAaCaNCTXMQN/dRBlf6RvvcRD/ + + WmINJQwVzhRSAljHVqCvUA+P7bn9HvOw0iQxefGAUBSC3iX7WoyZeSbcvOtCGZ39 + + HQJrAoGAC/jVQ9EFNzwXDnkv/pHRj7i0N+3cv9XXCX19bu5AKmylBgTvgj4xZ3R2 + + KFwmHdXTAs80D4qZPkun8XiFw2va56y+2e3lcWT2MrTKhs/dwrodYidOOg7XGCMJ + + gKrOJbH7cf4Ts4VTksouepDk+ZAdbgFcKye5wN2FajvvY5kSK78= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:zdmicwopo4p4h4wbfcbnwcrvyi:6qn75anpvs5gls27f4lybisis3udvjfjhatxiny7c72bcbtuztia:3:10:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:r3q6op5itaypcvquahlmpudidq:6esnusmt5xfk2kr7nyqoleb3k22ks4efmltbaah7ldhq3mfz455q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA4s2Oe78bWzPT+ETNoPRutptgpkUKYL+xxJTAoatGSUdsqQbk + + NxrKfoXADGGWz2OXsraRc9ucRjyjlbjFNVIksr4Ql2EaYPv3IVdPXK6yK9ZRHp+x + + 3F/sG+d1fY0BdXfMyafiPHGC2v2E+Mfa2PcGxEjA/3jb5pZtI9VKew+6d6ANVEtS + + eiRo7oFA2Hdczo3nNJGH0I6eBO12ifP3e1kAWoxrRY+kkx7zp4fx0hgxKl5YYJhp + + ZHhW2VeX8KNv4OMbDnUyQCgTiEHFoSvDCLYNJXwAuOgziyDMafzuYI7ZvNtm/yPx + + mpDMQKDF86d/PWTst8CNCXy57inD/5WxtshRtQIDAQABAoIBAAesEyPGmab0NR/k + + hfDQRY/mtPZS7UOyE5IJXSdq5MNuutm2t1DrSb1ncJE92nnoATYlFmNtFgqxm1Zu + + fzjrSMoFUDuqtLEVfO0Zp/N3UzG7Ikt1dMqpZQWM07mvfV5LP+tBAymiLMTHLcpN + + PaI4X9Gs5Ph1ztLsgXZXmf+/m7Vw4IrdU+ovT3qkKumBEMgOWn/AI/WqVaWpBgF1 + + eGTPP3pr39cb7b3kPJkPCTyQgKHaoeRvX9JrpGXe+z4BNqiZI01U2cVsAF554AKH + + Va6bXgzuIgXbVEFBskgQ18pN4KcZyBx3pGQP0OEemH28Zpm9r0EjpmZKWDhq9BIJ + + RyAjzOECgYEA+RHYAi1qlnPVBIr3ZItxSVwjd2+Brg9xqzvkL/sBQg6LVmjxuFNs + + IXYzZxZzcv6Dl1Up8jdP3NUUFaZLMKvjaLx732mUgGSesalrqshM3j+wxYrsmpQk + + J5hHgpDYrKTUpj3BsPJFBq+E39WoEnMnWipLIimGUFsF1bZ5rT7kc6ECgYEA6R0a + + lIDBaboOjLjY2JFdTHnqbCg5+f0J+bRUAby4IYENe2eR/omdqt5aPbksdDoP1/nL + + 9U2uAjMIdbYL7zSPd6bEIVT3Q7UPUbMhbqln18RcPLvjdk0YfeK+eT3Hg4XZhTqL + + Yilmntaq6AlCcpZ2taL3FaCXUvme6XRGGEUi5ZUCgYEAs3IQr9jqz0Ta92/rt4vj + + bdgtUVKMGszTt2vqBkuQZ3g1GWd4p7Wq1RzlAeOh//qw8ioQk4sYReFanBJ4X7On + + nwEVOixGKo7T6upGQQAYqZM3l8t0lhYfSkujUcVr5k7HSpJ55zNVWfDBCcdUVR6T + + /pk0EoPaWjCKLqROW+xRCaECgYA8ecptgEGtFhG0PDg1ZvDXaEGCsaToz9aIq1mn + + 4be7KWm//AyKBlWbAHhUzvdTZ8S4eRuKlg5wj6DAOOw7sF0P43m6U/qZ3B0PSvN/ + + a/9+oHh1YSEPjcyuy+YyOe7KlizqPVfvrWHsDzDjZZOReqttT8veFn1rj0rEsd+F + + aFo3SQKBgDtU6oa+9PU6s0iffu5Ev1GRT5fYE6QckfPP91UzOSIOqVscfIEzzKvL + + N86/xD6Plzzft63kQExQ3nuJnzhsf2lRNn3tedhT12GwHV2PHMinI35cDcFLzamm + + Ew/1GbD3WvZ90IPb6p742gHoDqYUy4CjVCPLl400h0sK9KEIt3Xu + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:wmnu2vkxtpdducouhywbdxiavy:tbrrl7peldu7poep6u2bhrnyfiixnzzgtj3bwrvfbfoedrabknnq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAys5wie0saDumz0H4gXLEWFKZ9iXAFs8R0S95CwxyQn9EMifm + + zlAuS45VKipB+ysNcZPStxlyjenCyb+jKNg4ZHD9DXBEB/iDflGIuJ2IL7byY4yK + + DQfk34/eiOms/TsiNc5YJjYQ9vaov5W46vymFhnOLxL+i6CnFHUC7eRSJPcjnina + + GhopcwN215sx2j4nmad3aI/2d2sAtlVoP1inlZeNdbp4ZfIe8YMBwb8TofO9ga5s + + 3+4Hp5bfhiZJkC/RfFlZypSIJi4PJdVohPxfTIFCYBF6DIPaL8rkxPzwFcFDgiCx + + tPY3JjSqU72586e2JMK+vygKMFS337YFf0Kd2wIDAQABAoIBABVAb7uMTmh3w8GZ + + LKTH9Xo54adRCmF5fmj4vArj2X9NXcSRuNZqwYcqWZNLDVH4D3cU4fJM6NulIMPK + + YJsRmUsxKdtEJeTd7k2I1rZdz50MYzb6TacS6jFhHpUjQ3zfuvR/dG5AoSN38nPt + + CQ0av362Yow9Rc403f0/S7jJAbCcw2vo1UZVeUGJKIsc+ALANrsCOf0ROEToCh5B + + F82zT+qGZ1DlDnCyuwUEcevWkYqnGDNoECfG7QGSFDqq5CcmLgsW39SdtfWBcyUs + + PtJlYaH/xvi9W6Ncuf5YIrUv4alkZLJ0XBgvuajTttsuwMOpN1SOSs6xvoT4AsUk + + /py7ek0CgYEA6FFs8usZHywVZGveO74qwJTLUFe6LcYEnTqDxGuVMCTeVMf9Hp1l + + oE5CBhBfFe4HbNEtUw2ZqJBQDkbEP1E6oz5Gf4LWlmnEbMsZBqgd/UJZ1hUwe33q + + 1cNdC1kw2O6OeULXCBzt/CyKZKGSjJ/JLUza0+Ha02TUTSEOGaFylj0CgYEA33rg + + m4rTpuowGvJ5ukWYEnKfsHoBJKtZfWYdpUnopWPs8v8tE3zx0vyD14FE83ZHzGlx + + xxdYT/AdKvIQ4EB5Q73E6MzNAFvxbcVHFx33JwjaR3/bG/EWs8DgGfkOIeDyogft + + 4nVQuKcernxMndU4pu832DBtbpv9rXI6aRcV3fcCgYBl19xFGZ8ntTGjlk4ULqeb + + SR9gFzU8/8PiEVbWcrsyIdd9nzZth16XyfbTpbWpbXG/2GtgL2QfKzSNLaS2hSuJ + + iLFrELZ1teQwNVDBRE3xSncLjLp2SJr8HurZIL5zOxEmQ5D0s4n4tKXuu439K8cL + + nteHb0l4xojzTvxZbBdJmQKBgQDa8rg7q7fRQIAA5q78IFLtP//UFrQoCPiUMwe4 + + eMDFyTDModS30yHZZCyHZs72+Fs/mc8vD2AmcUkiWibOjlxAUhwpOP1f7LSMp0sP + + Cvyp8bJpeopgxcNIOR9WUvvVlV4iAUK/K9D6GEGnEYC+4bevVY+Q72FHjOzskY1I + + iKWT4QKBgQDRmlhPCytajGNxHBKF4WM9iqSeBr8FVD1Q0L/OOqGHd2WaOPr/mK3X + + Po0/Ruug/l07GIuTO+aDClxbnjSnVIQkqJE0PJcS7uefQSDpikL/UXAZKgO6fBD4 + + pOAT3qspB/zHsfYhbcqhJ2wWNgcl0OBtcFL8qa7aZXj5j7xYQWx9IA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:bv6qthmetlhdnwc5tfjqamp3yq:ehz4ttd4g7ktkxvbovt562wfedc6jgnt5c6af7wxgp7jbwfwhoaa:3:10:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:bliwpq6aqv6np5ekwyzd6pzq24:y2pbh5xp3magahwtbhypx3gbgs7bw4guuvl4rgygv54vlx67jzua + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAjbfnWiPN+x+qVaQBm2BqDAlffuX7yL8H5/WbFYqDVhUvewd5 + + 92mHczn8gPkatrrqfDQ1uDAT+3XN93ZNbLXpVfApI/JR9Z6xbnjd4ngrCI3UenZY + + QdaMgNAYh06MkErLWuLiqNFIRxssdc50l1w7PdlTETjPfMkwQxrNx6NQYUaYqkGL + + Js2HJg+fvqY3IzZtYlbKjTvo6X1vTk2qf6EkpsVd6hm5Gaec9eLDumTGHSsW9e17 + + vKnDNQGcEMAR/XZLHPoKta0iJO4gEdg0uUolzcgAAxMbJFQmYDg2ZemEFp3ESHe2 + + MF/CmdJSXvPa13D0DdfGFq4alsuIDx4a1JTo5QIDAQABAoIBAAJdD9G0CSpoA8o7 + + 2v8BY6NhwKL4KPPXI8WdlgGM9tXHsqwFmuYib2zfibOI9AYaJfD+WesBekPWWiIH + + ahEnE4YoZDdCQlWrWOAzydeOE4GoA+Qq9xvZ/SvkzJPtHnEFnlCcuhUAsIjnDh3E + + 3LLtidtlNXpzDRrSrChiWQ48TgnhQi203dLAQHQ9SDu1GDux3RdnPnNFDB41ipjZ + + dGGPCOdIuEpbP9B+k/vQcr/xBUPhyghW9ysASn2I0Lnx9Ge+GWBug/iq1Rt7x3bX + + SO/qY5iAVc53F1Fp7tzPeThJyudZexakfNYtzOL/fnQ8WmWLREwNBwMGCsm2+FWU + + V3yKVn0CgYEAwqfRG4nvbtfUTxswgH9XL1yH1aY4870wMcQ76PWxT/4Dfo2YtJ6f + + ZWjTV1Jock2I4171HTRxApKMOhS5OmlgVUj6sjVxtPOSyM9kj9vzWn2ZHUvCOj6s + + kJKoF5a01IZng7qzo5dgknjnRMt1eiFI0Vhpb8R/nNDCtoDullqSlHsCgYEAumFJ + + bogBLfkJyMtvK1RzFXDEc35vE1O65lGcW+Kbo2YX7hlkKy/BmwBtrl1D8xoaJBnl + + +ztKcBrGXGta2B4n95PY1u+IEYom42koCyu5v6DFLmpIQ2JvEu9yIiTtNFTdYYyx + + sQHG9dsIOXAsBOwbDn3YbFNXDhvQmEcPLhPuah8CgYB3Om88nPpJPG3QnmjQ7C6s + + 1dJlrNDJiqIQeY/wmz0mMAJX68cTKu2bIeABZnqPOKqWCj28y7hEyRqXIMZr3sug + + sXjM2ytwmJjZ4x5Hd4PRc4jrhtHK90SfsRTAjhDo9AJHj34kv73pOaD+ZFjqm6SM + + hcjfKs63cK8zNjntYkDSLQKBgBKAmfOZGNThhjEi0PRyO8KDIV19zbUTeNhofac5 + + hc3g0rtWVfVbllK25iyLIbW+f53Z3FTme+tJHSwLlEckJz+Ss9ISkWV8W4Pz6n/B + + ZX06jpifAHGAEhrFHoV5OPsa+ac3emRiEshRaC2bjyMl9UGpCJUoaNoDtN+JHl6q + + p95tAoGBAJbsD8qJ4q1Nf/76a/CSR6QRjkvCiDyleC6wQp2Qn7hOQwbIUwb0qDHP + + ab2VcrW1bhIHCL0Q90VwD3lPlR5V54aukmNGJKY8cUqnNnMH7jSF6ER0y//AowrZ + + 9ZRTAHV2uZPr4N8lnc3daoX0FaZl3M13Np7vCmRXaOuppbEEock+ + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:5duhoqd3bucjahftqmhyms7dbu:avli47dw754af7h4atwg5s36ffiwbxzaw6ixatwm6nyohsjie46a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAlPJxm2YJfiYklq8Z/UAsKStUXkHfOfpaljHsn/mCLvTN45rT + + f2UWUhtX+6wFiBep9Bq3FC9jofyCHoIrcT3RsA7W1X5OgGZdG3AsvPF/RTaKpBtq + + fPD041dOuJ/ekjCEtQXtPNLRVETsCNkYG/9A5ixZl8Ge6OmELFQpHDMSVx4PtOPe + + tDn4srKQhOMSEoOzngHf0dUtE+atdLUUs+gwxGaByFOcd8h0UvZYq/JcQUKsPkTl + + rvbxFuujFQnhcIshhC1da8wWANcP/N3dSx0wv3934aoA58ukb0VzV21QFHyF5Bdj + + E4Yf5CboLT/dZNpIEmvokcGg5MHEEO97+I4bswIDAQABAoIBABsZRwEaXeTFJMgD + + gIt6Zu5wky949ZeTTHLiD2aFmyFW6bScwRj+98Ildmrz/6ekgofGaoOyIYLhsXzC + + ewvlzuYktQJvsfGbbholXQZdO6YIh83WrRehMTTBeDGP6IsZZ7OVqfV0d6BIz9bG + + RKQnWxPlgsFg+Tvv7FuyTi5yvkX6C3g+cGRXxDHVE31kJy9aXz1nK/NEFDzbbHLx + + PILDgS8UUOP0/mnGyfHgcXNSA7vhhiQ+FKSH9gRQGNImX7A+/vFxc6AzoQ63kq66 + + ygiDdQv9c4+O0f+X3+/cGyaKafz+OWKHg1UeXGUv4aTnYuxelo+RwV4dtaRygoEm + + dtF01XkCgYEA0ATGNf0sWHpxkdpCHEgaxLge+m0OerTIZKNzVQ0UFszsRCj4LvK7 + + Nhvu5rCY9T2C9CpJkgb8VpwGtBBZEFW7Gvfg0C5xQkzDaZ+AhEbWiSucOH3dFPGg + + 1IE8WV2oALu+IttuKizhQWyjSpfWa3taRiuZgWemEalLM5vC1qQTiGkCgYEAt02R + + z1g6BoMt2OExNMB9S7JyEsL0X+Jnt3pMa5tG99lHl9hc7vqxgb71mLKb4jwBi9U9 + + tFLIbTGJ82dXlFHsM39KU/xvJJiBlxfHwlfRF9t1amp68oBJrMyuQASJYs+3XmQN + + GAm44QKSGdCaxsdBOuQT4LMIQJKjv9bKE6gG37sCgYAlTTXd6JBTLWHALcs9FxD1 + + xa6IaZX3GwP0R/sefUHk9MpJTq9ye8RmZ4vngjNrhqQ89HhM30PQpBnvoB7Ydwce + + RuThb/KPWQSRpDB/h9RgtJlG6AsE/m9ArAwOWmUN/JyT05VlqraZ7Mk7Tw78JxqB + + CsB0HAoDkMATeRLvOmzmQQKBgCg7LjWD97hWMknXoyUg2l8y2zai81/YIUtz3DIB + + 8qGTXtNE+aC6BRuk/eJ10SDmarB2LQTW5oaQyOZTWDWFhYIH/hhQ31P45Ph0j7Nn + + 8sx5rluc4z82SPVUNyp11HGLhYOCEh2khJ9eIRLpZg8azIZQaMx4fuctSCNi0Rdf + + WaLhAoGAB+9gxfCGBv6EN9tZxPZHx5YTAjIJ4Y82ZRgMnGhijzpdLvS1AzZ82tj5 + + KDv9+If36M1jJNGSQIJ0bNIOGbZkaqa2gHAYb4gPzROct/msPq3/UacauNiUutCn + + Fu3UjLZ+kbmLgwU3vM+RGjup7xbshlSbrHFlnnrBW/dFHJNXYgE= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:n7ogyjbo5jigvxgel5ll6q4vbe:3yjb3zq5hcdavv7ruefawal6euyvjx3lx7quslvasjellv63cxya:3:10:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:l2haupf3wtffxnzmhgwrab5hbq:cux7vo7b5w5fcqfqldt6l5ijiskdcjid6rlcz7bjchvmleb5xq2q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAzZOs4RtK/VfGmRuKSxE5vLsWwJtV0T8lRJZl7Rg3EwTrDB1K + + vK7g9E8vsWmNphYSpOe6gZ/iOiLLMB5Qhml611luN4VOOckhRqJFmcSdIPjbmw/b + + O5z1985q14iV5ZjN2VMdfG900+GmMKv/h513BlxOC7Vp0BIZ+PAj19JyZXLm0pbn + + 475i2D/pAyIkzWGsNPU5Wm2GqEqbFAu9knp7G8bx5CF5J0RuzmEMJMQcnPZ68Kzq + + PRfPmgeevEI6lBRLxD3QpUJL2BgT7hKMKInIxP4GIFyWN3hMiDtgxq/2UHWHdH2z + + YGl1j0ArwtPLK4GT1PQ24vORxw1iHdY4w66tjwIDAQABAoIBAFSfiQci5oQR+VD2 + + Sr+q6BL+CpgfeTyI20z4Ah4OnUEpgZ37gtPXwwcef5nuwt3O8T7LmvUX/RaEUxLM + + L8acrfHuwNV+/NwBpL6ANtlc23eCqVeTt+G6s2+eG1H8ygN4mqfutFEQSk2b8f7Q + + FoBbO+802PWt6FA721AjfgWt/eQvIhCON4Jt405tCmRlOQ9KLJmbCyXsiB4+gSks + + iQUAPZI2zoj3L0tAd9J3KEcSRCYrSRTv5I2wBCuQtQVDXWZ5rCxM4T4hoNj9JWU6 + + kqKEU/nCQnfc/01z/jR1rgrJpTnfTtimqoc1IWC0sEbuM2Q+O2Z/szmN0hRQLCcz + + hxBduvkCgYEA0Qet8LyVH6CzVLof40VcpDLu3er4qPHC/Y56FNmtpscTUh7QtC46 + + ecUyNkWbxw2i4J7J/6x2nMNhPIgf9p85Xx11bQlAaEmBAEdTimp/v3GBxrY7vEn6 + + 5GFuIo0PkY7cjtvk80GsM3iXELaIg92qRkSTf6X02WydJHXiFWZ7wwcCgYEA+8Vb + + JpC43P6LB4oHbZmVEShjmiy+kKRurGFkwOGrH1cVq70x+78EriyrMQso0Or07L9R + + eiv/sMawoGgpF23UeGDWAr3aPg+ZNBeOaH9RxrqPxR04zkBge0+j8fppQ8ynAPnA + + 8OpsO3FYZNFBi0qUizRxklE/6mw6iTUAkkvIdzkCgYBI2r5bW782CNK4Qy7+DZze + + dgofOth0Od9WdKRERCJsMJKhWrAvPLWQ35RCqjxDQpN0aqPJAxlMRiTL7j4FvTVH + + 24KkAEd8kbHuoO2THs9rsGolEjr7w2U42GSEklnMx9hDyoyf5FHalrtATf6Cx22j + + lB88rGEMrviOTq//+XpFXQKBgHQCrkuI6AW8rGde7KlN2Wg8ihiigXS4r95ySjCu + + S2F3iR7HYN61V/zBzGge0kHh4dWtGmgHGhxkkUJ4fGa1Tu/g/vvoa0WpfliIejAg + + apf9ov2ax3ASLeLkAZEgZ5y8Ej/a1VKtUg3Z3ncmDOOYC/ZQxfw7wA3OrPJIH+lJ + + TifRAoGBALkaj07vfKfnf1oKCsgalurnPRF5/zaIrsQUQ02W4ZKLDPCa+0jcAPHy + + LoqUyfmGy/+Q9QFRGVTY7enh65sRadx7CN3TAqdqHyo1KIN63UaJ11irGdQZbgrr + + 6bNSRq2kPWGyWtURUP2oo4q9jc0iWfmlIO0OXihdf1P4C5Uxc2GT + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:im5wulgo7r5kaqlkwexlxrkw6e:qztfutuv3vxg6dzi5zn2is4q5gzzavvh4sttlaliyhz5oyi7ihqa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA7EmomKj2wzFXeP4lRtDJtToKB4s5mP1VP+LP4XESDux60i5q + + OjCMqXBnyRJpd40mqPRKjVWrHLmmZuc5+aVqxXrcl4TW7ZLBEyR2WI8WuTaFnEeI + + gJr8obAKiyfIeCrace9IShGhtFNuon8JTMILE3y37jPzhBMGL6OEMguucOi1ct7y + + Pg8Odd6aiJ1Jn3OYa7nf69PVwam9FWvg0Er8jMrphI+2dpNETLkyHylZPTkk/t9e + + QUBSNW4sHfUOqwoBLYrw4B5xDaTNSsdjqmxdz9rRovBs925GwRCOEzM0A2VCUkKg + + ZeuIOnSh+mDhgQUoY3CSAqdjda0ba2U/mRP4WQIDAQABAoIBAAo1jAfti/zmy75d + + 778hrAdtJqwJBU/xiS6Jlp0JYUP9Dnj4ma0iNh+njEptJdqtIfmclYCKDiq/cDvD + + u5boYWa/LlsLGay54ab5tTXSF+OgghEcq56P48C6LhhxW3lqs5XG5o8RuDSGAtKZ + + Tc3v1+HrinhrrPa8yjCCfoaZh9vXsuc55Z6Svntr5EmsplpTUrgUq8QgYk5PXpV6 + + ERadGnNOKlP3rpy18BxciEAdCFHBS3genlqfefIJ/6DSUH6lrlPWpGgoUC0YIQ6i + + mbQ3PnRiqQzLbKlNbNRf5QUQAfcqXSlEC/puwzj/5TNcM6gGgAaJ73X9gh4+xsLL + + 2WmgvBECgYEA86Sm4AR/+yPEl0famqO0ThcEoRd+oDyxMn4KPVgIqsgeN96FZA4A + + vGQmPuGlZtsvvW8qQ0XqaGi1E4CSdkGyDYiUchMmuHTXRn+FVQRNScio0txKICuc + + MHTy8av55F8GGa3m90LyPvuqi/FyRheV3dmJ9Ou2EJy7FbU8o4TNr4kCgYEA+EWB + + 0t/gMEUg1LLNx1EH30kt/5ivK6uJUN5nyqrtKT11s+5Amri2zOhS4uiY5L1FJ6ap + + uk2WewmyVZl90xnHyb0ggznjhM1Bu0v7538anx6cmk2vztxVtVp7QpCPaQ2zVRxa + + 6lVjV7WYwxMCkCK17b5C9wGtVrZInuxKm0pKflECgYEA19XPwvoZihg4iq+rt3w4 + + OUlo33BZy4eYjhtb5NX875XSNzoYPvesrTenLeNlTEX198Hn1aq1KoM/jiRDGyG9 + + owGQR7IxhgxzvM8xBYyHD0sES6+8tt0LQ14G7hKkkCuh0tPcnMSgpyz4+3oL+o3g + + RKT28pJxOiwuC9/+9Pir4ckCgYBtaaRnHIaefziSxCHv3wQLISMGa3F3W2dunjU7 + + mcxeylke7LbH+POGpjQxD7Shyc+6Q7a1BhB1NLbFBpnu+IOVoqW7bz2XfyWitz/S + + q689xK3bSrVaArw66h88HJ02/PS1Y4Olle/r7XnfLneIseNfXOQCG1kax8aFUzkl + + 6r2doQKBgB4L13+ad44L1O1wmL5bQbXilhK+y4ZCeI7kmArASXbok6bCjf2KhN73 + + rw4VTeImmWMn16GWznvekJyff6JkG6f+RMUSeko8GT+Q8A3lb+99clJxUL8E548U + + GT672ONV/XbMLaIqGlZfblZ0qElrI2744IJoBr9D0uP1hvxDz1z5 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:i7vkx7yjzrtlzwnm66a7jn2dwq:rpz32lhxxu473pbze3c4a5yrsy6yoabfdb6v6o7plv27w4rlwk7q:3:10:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:guphc2riwixq5yh3hhelvznxvq:cb5gfzv4yswoqct3njn4irc7j24q2cm2byqlxuawaxyjrrvns2yq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA09GH1R4NN/xGCfZG/AsPeQ/UW861L5FKvT+F9FWmEbotN5Dy + + DsbBxeduMPEti0z5wZWXbuSrHq6lZMD2MxJ1M2QL5rNQ+eR1Rpr8LAQO24PE9H9X + + TGJO5aqeIo5M/GLFNGG4sDCGmwkwMGetNAtTFRzqjq1i96GlWBIYclTRLj5Wey92 + + EaSCO+CWjyiYMaYloSd0QJCyfUipfrtA9O/tKBXqDq5pY7g0elCCq0KIjyUBRHx4 + + UmTcl1Hpg0S2i5BpkskvJr8M6foY88eoWxmYLw0MFb7ueeh+3e+NwpSPsx0lP2Wc + + B2zTT/F8ClWoHR+u4YqCSOmePKci7qRtx4pQKwIDAQABAoIBADdzwjCr1mASvi87 + + dyfiqWFTIJAMVGioi71xlNr7VSeM6uuCGax+ohnyVWmgqgCu3S+tvuA8IwQ8SnZP + + AeUq7t3OUkNKLGfPRFiAmIXZZh5Xp8cuUydfETKU8SMwx7zHCsOE1bniakrKJAB4 + + E+LtGAoN8OX7RE551fRxgE7mH4EQPNwTpl+1aqAvl2DOukXjcyywW58zBJ5VuiVf + + OR87US8E1RLKAJjxcMeh/J2hJV4KY5LIzViWBsyQH+3E4938qLubXlKpZraXzoYG + + STv3PTQd17LTD574P/1aFAirJlAobqodbwkQdc5sUcQjGi4tcK8ju8UPEllmrpuD + + kVkfQUkCgYEA5zqm0feBtoeJa2BxoNmjKH1p+zaA3RRps44hDnriOrZZ8R/xaa98 + + CjhVJMH4lthlFNXDtH+2VgaMs0AdAXxQfhwMUTUgX7Oxivd1OG7XBDT21ITlnd14 + + f9tBy6J5fRXGkyHRSZ3ImCRcgObCA0BkPPXQtdzdV48O6pQudqEgQN0CgYEA6oKN + + Ot+p3unrLUP17oQqyEHnCcPRrOTQkdVOZ+rGeQm/2bkzVOs36q2cWJcXrOFh+L1h + + OKnpdTvAYpgiDsBt0i8CybXhUr73l2c/uO19z91VUiFVLr1qNRcW9e9bJNQd9opx + + E4NbpGzFINo96wB1c9oVOJKfBKzkkiUpCOGAAKcCgYA+u1bO2AtE7fiGPSAWt3Tg + + Y0YBdYP4drVGlWS6fPQrYZV9KWFhfs50J1xSIJ3EruidgnEZ4xwgsp4xc09rO8LK + + s+lTjso9rI6aWRBgQxHqfkQI3BU/gvpSFbX//RBgsyuwdxhElJ37SMIf5nr0Tt/i + + +f2pmUYjnxg45ALHBGevsQKBgHhMXkyMPeTnFEhVK4yeah/uhqlgtWe+vSuCQ8VV + + D1k54hu7QJTYUQfm5WQgpfl+aLaj14KszuDftPIe3qG4nt2KViDJV3wOEI6vXWXt + + FnQSM1l9VegzLI9td87TaWr8ER7Op/D9mn4/eeQ/cDHkO1whzG8H7+EDHAHIZEN1 + + AifTAoGBAJfmHCZGx+d1X5Rtx87YgpWzwVDDXTveZ6CNGe4hUNAEVQCNgVzol8Ha + + o/i+J3IqLSb5KUclhFrnH+fMYelJm3JQXFy/3c25cwnQLTJV39hIbREDrErGN+SU + + XvQJSQDtqXtCjWILMbSq+xL4fvUYNSqtoqsvYwV9XdkjG/pfaHZt + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:fyqcwoevvyytv6vwchxcwvkcdm:fqdtjlkf2yctrwprgu2eei5n6noufnasi52qvqzhmoalaxgo3zsa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAtptKt0U5+0WhbXHsP97E+R4e98MMZ5zhSIEJf4w0SX1PN2JG + + NoO3CpdtmqZSHA/QdiMGM18ThzK2RU9OfU2ltAsM9VGFPjE6qVGYu90vpYy3RTVj + + en3dXXVix8ib2+6vZSKx+BZXxadeK1AMFEKl6XzbcnTfTgd1JsE8pImgHhUGXH+p + + eM9h0MxIMXvYdGeG+OghjNkPUveC25jrJO2ZNv1A1AxAX7Q1vNgFPrYe7AhJNlfA + + QYq0TJYXqywUYDlVxEtA08CRM3urlFJIHrdYgQ6+7PkGqQ1V0nUdosqHeXxAknrI + + 4U1WAObvl0zGHSG6UzfboLxPKHqOtpxyFIrptQIDAQABAoIBAA1CGdr+orwUt9Nw + + ybzFbuXA2HIYGPwjjtPV0pu5Jp64rhoQ/5S7sXw1DGyFwOvFVixi/0iW5vMSV9uR + + FjDQ2hlyvUkegcnHMewolCn9CurpMZv2dAzpEJEq5wt8YZyb/Y4em8St0pzzjvR0 + + G7xo2Q+qf2sVrepGGQJsVfvYUOYoyXihZA+INZ2Rj93jhFHDTs27vo1sksj4OWDx + + urXat3Q3tA7AN/nTzdKPOSoslqbctY3qMtJuOWi26a04YWpa+QYp9bWEEKuKScRl + + LbTDqj7GgBEC3ODeWyI+PoQg+Q994H1AETOZ8bDQ9r+C5J9cC7nXOKZrpF624zbO + + 0ZvMEeECgYEA/z6I+iQxjywspyPHvhbN2EeDwEjCtGrSw6ywO6YiOLy+tjjxZp77 + + drsxc8yIfy2DAN9L/zg4vNYD7AUVFE29/h/GcPRU09VbcMUzlP4xAhs3FKg9Jq5E + + o4t6Z3kJKVzFjkN38fuzMq1SsIw3+ntlPCqF4k681DabW5sF3XFaLekCgYEAtyWz + + Sid2pfJoyHudbIWKTQZwXK8STw84VE8KNCviEGPooBoBSs2FInIgdW411DYQQyjY + + PtLakwoFOnj78LxBPElq8NzVKRRLzzUcQVw9uXTZN0UGTf9ztauZ/dKysBjKIyzI + + NWfz1+SyfND/BFwQlAINLMpnxkgwjLOk56wMge0CgYAScfJ0ISlzrz2K1osYsY0u + + k/xxaNCpOQ8CFPinVtoiP4GIqZTIVbTWX7CzLZSvnBpbdceIKgfvnYerBrL/RJ72 + + PlWY1A9NP53cCGQx4Cyqek0AsSe6I93R88Jkt9pxosKkBTwlwIqyntPa7kcdUs1+ + + C5ShRg9fRpLzi8BgwFBEAQKBgQCYqJkYb2qLilJjAf7HLUyJRZu09cz6D0Kxq6xi + + rk1hwhVuFh8LneGiQ6TgnTvLJkFJ6arOOu0r8QdIpP3DvPdXbA7ys/ANrLhAABIM + + PPnKMya31hYaP5rQTDgwhUaiWBdtWG+NbJepVhycw4w9swuygz8+HXyAnz2wmjET + + VqqaRQKBgQCJxWxMire59h1v1SMAf6x7eZlNMfBf1VTmLmQalt33xCk3egdD/lHx + + qS8fZdcBgxHcVYZ2vWxESyfyZ3Iy/dglRIKRy2rmZIyKxp2yQNURXuEkKNQdXLrt + + NalUR6GCI8RRgnZCHmFIB09WQ9BFnSUzbFhoLOYQIg3Dm2HoA495yA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:d2hbvcmbex7fm3qu22yj4qnkh4:2xwqxbawwgn773hht6etox3oypvqqjv2orktnthfo2e7vibko7ha:3:10:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:cugmepep7hr4ori4mvbkkplac4:5m5v2l3ul2gmekwefhahep5xvi4o7frzr5t735ruioy66oicvf6q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAh3dRTejzms9mArre9F+NB3B6BmFfrOo/fytWqAeT9blc36bJ + + x9ErWL3PhkhxJBaCQd0QxwKbM3gV+41JIJrrwMCdw1D3yi2aAqPo8kogQg1/MOMp + + v3LF2OcuzY716WOMcd9KFJDgIMd2dQpO0sEmxsg8r+PDS3mL0ZFSMHScpcn+tq5W + + of4qhCFEjkvkWEtVI8fG+OcA0JAQJHQDzjNPuYE46q8VjWwRSSt/5L3U4IwF8IDy + + v1w52Q2Q0pdO1OAOVh5FxZ4lybu/bhQENQGaQV0ViBSPtYglei7fYYkGhVEpZlNr + + 3VfwUtywsvqTMfsHIDUhgycAFqyl839wPal/oQIDAQABAoIBAAFJ7dCXcEXfRkGt + + ZHSfuhhBhi+sWnwrKFp934+ursYuMsd/7ziC8W4hNCm7Y7QrsKaOw1uZVz+om1Du + + 2azBPI/zZSzYBtt6DpaK16sCcIcgWL7u0lVbcq1rGaNkAkvrogjtTmeerzswmpxn + + cjOIGeXXPtiPiqqbp+xg/Q6v9VOQclw128X3roNF8WWtDKZBUuWAcYvT2Zot/aNf + + 8KND5bal3af2m4dEdEGK3d9cvKuPsukCWkYecghy6K/vgce4uhA5I+C/NYvVEvWv + + +6Bu0zNNT1ITlE/adhtcdYD4EClV+ShPWr+d304HOVLZD6NWJsmuWOa77ZewgmT2 + + jWFgOaECgYEAvPQP99gKb3+NkU4TilgK6vDrlt3qMsGTQKgPwB+hTJ8MFFPKyA1e + + +pSudVtCmchRg2E7YAU6NOnSESuMvXwAY/r2i7annvKqgegwmP4dr7K7xEwXILic + + w9J8G2mAU5l6XD/55kUPIyJRE65d0ver4j9krjH8Ok3HksL7Y5NCoKkCgYEAt4ii + + 5LYOockPa/coaRFNSTfaUhKc9kii95K8iPyRMx+OrgAZRYuOAL14j0R1Q5gt/7Pp + + R86SdRFVuGCL0Ec3NVwZHAeJZVxAv5I6vpkKQFE+UN7UAp79DY7Usbo2oYNKLbnz + + QxeEKdFHGz5YzgZAT9plDG6YDzszdltxoyy4KjkCgYB7e5BX6yLevN/6fqi8d08j + + PLDpljrwUpr13R718nXKCgKt4hiaZkqUvcfJQAulTkke79MKrD/expOWzvwZ9MiY + + jjDDG2otsO6HGQNxaFhkMw0MeqF+q8cfHhYnH+pSN/HECbc5qhX7YvjTQNdmAJ+e + + qskUIexw+dWb7rq0107qiQKBgB8KUOJ1mAvswVr1NjRu5K9Zbucqlrlgl49fldtl + + O/l1gOAUzDFi5OVjJhy061A/UKhKeU3XthVulRzV10+me8Pei7Cd5bLq41iDFsRd + + hcpS80MiLKE02n+MhJR6dfrjBYyuQmI6e/PGnUwSQ1q02/OlcCmmGrmYvZ9q39FF + + IvChAoGAJCqcARPYEZ7bRbUiWNHw58C12bjqA9+Z1aIBmBSkuyIFQF7jDDoOpzON + + e4njvXv2tY0C51NVQrnNNqa4Fsb/HEE7mv/hAApEGBZhcJIX3nKD1o+FtCIMROe0 + + xx7f3h/IErCNOmoImhrv2A5Cxi6cq+ZN3LtO14mPdkq1lwY+9i0= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:ynoa7zlnwraylieeahe3ndidf4:ukho4xxl5f6zku4qsknk2aetdzbkqkq7v4ebwiqwh77mdkyw67na + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA8nnT38dExgYDxNQX/t0WtAGZd4ibBLy2OpW097OaJ3ets86R + + qWNH5LWKwESEIQhRAM1bynMudc8dVCPRRuMBRq+aVJXeq7eGufhptFvtzIFz+/h5 + + sehSd+D/t7puCQw2uCA3E/xf/QiqVhMrqnBZKAWzflrFlIxabgMjAxST7XxuPk4v + + HxjrwEdBc1UNwGMJ1trhMWdWrP3FgBn4BIA8YOszmHagsjheLBmI+QtVbtk9EySd + + +zTXZdGSN1wq/2WuO+YWBhLz3NW5dnFn9OCTlBYqzGStpAD3mATiQ6RNVoH+hUMN + + hNcepowHlrnzjLW0CArh21oFReznFg88eEpYBwIDAQABAoIBAFH216Wh/P/5YYXD + + 8jaPctC3Z7Kt5UT1K55jI9DFj/r+bCPHVJrPOiq4KWZz4rwtzP/56yjkxZRCRlY+ + + Y0xUiQZlbsRgAuzF9Y9gxw6WMqy6J8RJio2WjGYEkzx+kxqQ2+Bi12t0mNf2eWnu + + QgjzwFeUkcfJFFfyF9FvUwMEDjss97odJa1TRP183kBDSm/yC2dndnXuS4HTqAnK + + 6ybRDUm+3dg3um0wAoe0xZhW37OECO0nS42GK2DdHW+Ln8Uuw+sMWT4lBqq/5JQT + + 9pNyUPqvbxkV7Y40JPbSFHG17eUBDCRtc3G91SgEn/MY0iZMdYeqi5xaMyhknWBi + + CTwRGkUCgYEA/W8qJcXUoo6TtR3y1XO6vC/gUBc7zxj6UaQAK/gw+m6SUp35Q9Yd + + pGP2t37T1m2PMcWl7CWvG/ctkuY9B4JvaAGrfD/6XeKdnqm0qOt5B4yy1yykfJ4X + + hnXQ0Nv0nxWJ2Pi/+rwG7tLnbd3mU6AQmp6Kp0lS9I+Rrp2Q2qnOIC0CgYEA9O5D + + BpBn0mpgy3d+55vZXufTSN5ZS/vc7WRcWOGCtVPHD80k5uNkGiR/XVu6MmFWeRdy + + N8XeGZl41scKnKtqaIbr1tWbRB0HthSOQvJOSXk8cbEbbxfchUsBlW0LNmMMQIC/ + + R7388vtSdnIOY3gcHprfNT0W35f2KxhOA6BLBYMCgYBMhl2WrEbJkv286b8ifuB6 + + 5IX6CRnxLdyf/EJlBHtdkzexpKvYtPWcZubff3ddvxVG9SRlyvc2HYvwWH9DHjqf + + kCmEyhjCcqQffaTkgL257t0tpfhA/MejvT2BY3lY8/r8vhfSESaSxLJG9YMP6zw4 + + Q/kgDD71Q8i8ji1oKW/pPQKBgQChvwJ2QEC/vM5lL2mX69y1huSJl4Ri4FW6U2+E + + po/ZzRSFA9VdwEan2PhfH6crhApF90zPNhUA1M/vDgyc/7pKgucVvYRGi+E+xf5Y + + iYlXjf9zmSDj0V8oiyrlkdg4t1os8pje+MEleQCxBYso9vWi5GWI0+naCJFhTjCe + + xmkknwKBgQDLVkyCu2lqLdJXEpEjnaYitlEFo61g8U1509LxnqvqjQCyBUZRf0Wt + + xc+QEPNIlbF0PmX9dBFVazq9bQ0bNZk1C2Fp1EJ/62MNGrc5PzNuZjXG/abfX+Zu + + uYxLWlHgLHuky81onVX0+H2S1y2RTUiBe95xwIMJu6gFEB1iVq3a1Q== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:ccxkyfl2qtqyhihduarpxbdcci:e64be3i2t25selbpc5y2zj443gkdo65chs2o4tpqb7axud5lnxta:3:10:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:zlyggm5badnoshujgf6jckdaxu:cjtasx6gvdlsxn5w6wf4xltilhhqq5aowc7tblsewkmvzplkjlya + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA0rjXHJzn6mxSQA7dvD/ZGq2Ot8GytcTkwcCzqsSS7zWKiR5l + + 6n3krs0tEkZNteHntn90oQV/LxB3yzoITuZmuu+hT/RO+uC82NV/F1Qa07mJlfDY + + qxGvSfWVtLgvpkh2ruvO2N8B1ClRKcB3mHMnIU/ajHY12rQZhKIOqjvhrqXPI+We + + S0CjiFbAfYViaCsb1wabjTxg84HhbXVl2GKjujecYhiwxINp2BsNAVvuveuEOvBK + + Gx2CpnvQ2QWv/Y3mZe0o3TeCy9xAEpMmZIxHjFfrLZOsCifxB1VXcjxdGiVpmhcn + + 4gxFTldCKVwXdjz/KzyG/gQcKPRiVJanBC9GJQIDAQABAoIBABahHwjFmOpF47dZ + + YVqcCLaiuNbnCEgY8vATv7exEI5703rSNuOtzWcwRYzW2/WSYw3oNiAstPHa9OJw + + QwAmIhYlMc+iTvEGPYGTu+hHcfIW1L2zdbE5Xve0VfVoakWTNpumWzpTCKE+Jqcz + + MiS/CQ68wp2e/D2WZb8moCiL8bqNhfo2jhuyXuq+QJqwCFhsgNN5QbDT+SrYCTGV + + sg0sudx0bcmuZ9+1RATuBuzgBLIVSbwyWcAtM9YRoYo+DKdlaFCFFAbQdo/G+tnj + + +scE2KjiPE/mr1//Wi338gbjQZ7OjpVcAE7iBBie6Yrj5VZ23Kg0hkFQYGz+PiHr + + FcuAsakCgYEA3xxtkdDHGNpBx3JmCb9aGqSCO7YhMBFlo1CQhRVVSlNJwSv/KK0g + + DTYyhwD/bIqC/jny3Xq7RCkaVgmQHw5hMoOBqmNuqzAdBHHUL1xvzYKMjaZ7U3J3 + + HLSl9xbweADUO9foGOjZCJuSs0bgL69gUry6CfdZRuX7+fZscYChq2cCgYEA8cji + + 514ojQpIpckd7TGyelLQbSZp54YKWGN//WSY15Ool2f/bmg+DVSAt6fK9KEvfuSw + + GF1+ZaeYDg6L8J40NMvj3zwA9B3o5Qa1VoNuxC2gZosh+aG0GLsS5U8/EqMFwuUU + + 4Z6LXzr87o4wh7yGR+2OsXuyHghPqg2pT2QJFpMCgYAqn1uvR5tBfDCk0Y38vrmP + + 7W2Tyq98Z1ZrZLC3O+QXVuH4LVeJhclhvMDaWa5yJePwfVGQTioIU3Hcjecih7S5 + + 2bWjv2sc+QwSFUzb32Tcddw0E2HsByoKKdiq44783eutowmL+K+9nTrhVODvOynD + + pJpF3SMJEFaa4iDFbjV0cQKBgQCkCHPYIAtG1IlA4FcLSsIZNwHsazlCN6/hE3AL + + yyneZ3Djd0zV7KbciE3jS1Tn7kq4vhGyFgvgj3kbYEcUcWBdyU3Jb33+ICSW7Jwu + + G3EUaxf9ObtNDqWOeaxyIfdaf3szJBOsldFcRDrA5XqLPB2lwsciJhdLRLw3VJlf + + ITEBPQKBgQDHVvKBfDKNKVhqTFkycRAzaWgtoVljEIfjAm/qT1pXthhaB3PY9NzJ + + qiyd//b2I/8mWIGdRs5BqzY1hbAGvC0qDGLYZ29GFs4J2s3Vxz2jc6IpZmIbw30v + + PQKAnbv2N/7Heauqbt88TPY1G3dz4asI65gCD/7SmmtqhGqCKnZWBA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:gxq3orvuhm4mtwvw6y56cugcly:x77co4v4zj2oicd56pqyvqzd4kcdhuyatx6itovmdwyylcin4xxq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAvJZwIBA/tV4AONyhJyebcdroWZgshXLoo/BdnTDTi2Vj5S8K + + AtGOObP7foNLz40mn4faSV1uSpFvAKKlNWhZoRUlkyh0hMIQS2WqHUkGFrJ/S8oA + + HvoZFNaVtVtXGlDI88wUSo4dR1Kbm1480t5M62RyNos9FmG5W5n6RffhuJZBUPE2 + + hAuMrk1wbJDgdz9+DI/n0KAi+kCPpktBjN0uTgiXH0xFJAImONLVkSFGUVdDSKAX + + IKCr2LPc4ZGF38gbDspg+NuQR3Zk7/I4IuGevZwXh+YMgpL/oAPdYZe622yb0lkP + + qmIIhpMw9iMs5bgJHiXKqwVl7DIYp3qiPirN3QIDAQABAoIBAB52B4W2T4QNEJN0 + + Ak0KbGTsi0vayj4tPFSBQQMLMvA4yp+R2dfGChIEofe3tL7BOYmFGQYb+EeadsfZ + + 0ujt16RZf73lnUR1pXTNkWJfkYMzBmAIhb0l1SKfh9jzov3A1LnvBHayaRpEcUFG + + 7HjRqAem1tKRP6cQ1oQW5UJN8qtXcBlXugjlQGu9SoDKG0wNQ0e+47WlOqFribzs + + XVJK2Ei2jH+ICeDAzNY6KlwsOv+GtSxdCc6hSapVRFKPHf/A93iglSKcFziAg4lh + + TVrhLwzDrfY5RSXInipYoP+cBO0Bo3LkzF+yo5nVkdBGlH4CTYpjsompgwltECWE + + DnLLuaUCgYEA3Jf2n7AKjb5LGnA49Hg9lrN3kWGsmJv3AXmNPQCR+4752lcWKPi8 + + h8Vbeef35VjgrIfoxIGNf5YwAhZy5BHrz+IB6z5icQ7ehHnV/YsqnoDI6uwJy9lQ + + QzoRMj8xlcXe043+ok33sMbYBDQTwWZ8XFdl8BCDzSwzxQvhz1F5/ZcCgYEA2ttf + + Se7r4knHGKE+un0F3q6YpSFSxN504W2LO/gXpBDBA59BZubKqcCQSxY5QVgf7hYW + + Wi7JtkLIYBDOaNKRsJIWR9CtIxN8YQpR0XQxMcyYW7JclhGFpS7MTg3HKi2imfmF + + 5yVZU43BbDg8dqnl4+oZpDjRuXCQW5csrO+GJqsCgYEAi6EY941LsNrR2SNNudje + + SyTAO2LTCCo42FMjRoi03sFqf3z+RuLjGyGePHTLYf23AR5qBPBoK2labAffo2OA + + my5YvpnXX+7khIBGJl3PlVK5WpIbxU+B0XvQ5LhBX6dG2ywXEI8/iELk+wwnsRR5 + + BU5A9QrPErC2+DQEM+FD0XMCgYAKY5V/ZfcOk9/+nFDk+2BW9MTMOeu66rBzrwaH + + /zvoDt+Ks3mgT95Y9ooi9lgbcPp7C9NdzpDGtR7b6JBTy4Mc9aJXIGHHo3opBRtj + + LPfU3FhzKeFZQlWsxK7wGZlVuDrawkyH727xF26SG41LOL9v9UHoWMYj3mML5f45 + + 61jb5wKBgDkaU/ngHe1yZHcp4xODgyS/d/GX1cxcsdjHvpX8wr8g/uqTReGEFblV + + cJJz246P1u0ISESiLcSDJEaIPEXaV9x5bOHrUfotPrLR9K2q+gxpx7iYZwA8LSvr + + EuaRLe0uq7CAE6Emd10jQw7CZFkAnlObMXHLsxGpoU7iL2qHU3hb + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 3 + segmentSize: 131072 + total: 10 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:sghm3tydjjaadmiiuda3flhmne:5fqqykrndg5kydmhwetwqdzria4ap475j2qfmq2gmklzop6y6tla:71:255:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:c65i4qdeg7vad3lj7aa2nimdua:wcjda3bhjw4zccgjeof5ddovqd4i6h5ab5giecvj3bwiuxlxmyrq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAz2I20p+CDDfJxxNVFjry9xBzepPa0mCsusjrd1KBfvCMx3oE + + wudp9YJCClLGhwuATEr16z0endWApkktRRratS2RGn1bNQ0cuuzjLnuTsT7sXhwy + + GXPzjrUiYMHbIuef2Lrby2kuKTP7UCqpQ1VHS2rqaQ+iwIvah7VqI2haVewh7/vX + + 3CR7BhMCFKAmTpNS4+lKa2UPbpXvRJ3kwjfkpoSYMvrRNEHORDUnQ627X1St5F7p + + Gytfsm5do+RpcI6DYDPLjb3BDNR3dwgJytxX2udsHIqsUu/wKLK6Y1AL3201C04V + + FMlrhkeRFc6XfPzaRocL/y2jCL0Iq7b82FikAQIDAQABAoIBAANzzBvXge+4IgjJ + + Xpo/IvpP8Mwyl+r2pwl4/MqAuh0l3gIYGuovtgjbQUQwupNW8qzSdqOS4eaYvkqG + + X1WOK+PmPUsmmRUaAcdu2B1W+09xD7hFWeQolP5kL41SzNYY6wVNnwkU2CrhbaaY + + /zZavhQYVIypMPlpmpq1v22VeCOEAiSiKicn8LvrDuB7HsZSV0mlHMq0Bjgmi3tQ + + P8CCofImp8OnuK1+Zpm5hyPTKvsZJ1j3D2TPOT9R8bjBy8NA4rFpZBOfrQd3dX4Z + + 7qWFHfn5PprIZEaRmEgido4dn8k8wRRDR8IFoxZcDtv2PjlSMVjaiPt2Tse+l3tn + + PxlYpUECgYEA5F5hvzh5rGFjgwwhNnP0NFRE3N6/Bs/b+K/2EwxUqQvD91XtpeM+ + + aiLKqAhY9X66PzPgZifDDKwzybGbdlyEYXS+dl6qwTvPusPoEIGs+gQW3BGffMai + + 25jlGZaoklr2ZOKaC1ANsXsGmDHWuIcq/IzLTRedrouOqZkaJM6kyjkCgYEA6HnU + + ktCyk4ughuJ705e4UXuaeGLsrj1nOBSZ9asA7QxqTFFSi/DKHXjoxNbUd3FZVJ2g + + c36knYO4VsYMwgaDORSAezF6j2MW0INkULQBQl03M9HmeqT4LFMW6Sto2NERIvxF + + R6T2mPWh1IP5PDeoaVRkuuqLcJrk36kVzc8ZyAkCgYAKoMHXzl8LQLUK4kOhbyAM + + V2elB9DIFmBcYIQJOuetvlhuaFdZAwxikB/yVgEd27n7OwTUfEE9k74NQvDDP2cB + + yhcbFyjHOWtfe8KPEhnkwM/3ifJsMipeIe13lWVe+lDBPTKCGEWq3tjduGQPzmqX + + uk2z1seF2gTXq8JluCA/MQKBgCWTc6GbbBHfMr46o2srDdbV1Lz6uGjdce6lndEQ + + p+Co7hGR33bRH8otven7E3KO9rJvm/yvDqqLHOOhtXQzG0jBoJbJA5djm89uPWux + + /LYeXQraNZfDTH3VnFFp+9N3z35JKmWPK3DD2zl/b2ylTmpgArwXpxw3XSEtsmGG + + xRMJAoGBAL16UQxn5k0B7R/bzawd5DzYX96m51DOi0MoZPEYXaOBCMY2k5wsvt7F + + LsOBVUZIz8Q0vAtYxC2T6uZRj9Tgg0ufjUq3uc/KJGvY3ZBBC7o3GBdB25jLzF2f + + gmLCud9YOcaZpKzcdDx3eHRDe/cWUoN9d7F0A/b4JMib0dV0Pgr9 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:jswgkqtxgcqw6xrjivthxqi5aa:6a62r4e27eqtgi433tyjd5ijounpuelqd2rgnsz5vascudnp33ka + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAuGqzbMA9HFkXV2SDqVlTEYR/Q9+wvjzjekq/SzLK/A8tMWb9 + + HAVggYq6vNEqowspiVVIjspkXCPAxE00vlKQOpikcdKM4euG8hi259oFgBQFx2ER + + 2HmEljXgRmkf2VuYWdoUA2ApMQiuoXRM76WXYA6rzhWp4PFdmEiv2zFOzOSWwM1J + + MnyzaN89Q+bgDjl9He5MArsxsgVOhMTNDWHmvRY5rSWzoPv+9Bs7Um6uO4nX30wT + + kp6adeYfhndTz4WN0vimYhyIWThXrgaeTIzDRTzAObG8V8RW2l2z7g333PNYVFUL + + Cdjzo30/b6otmHgQVfb6a3icMLisCG6J4UbWxQIDAQABAoIBAArTrC4uY21qjJct + + +JiEvOlVHvdK5sXlw2bOrx2OK+0cQ1INwr6LppoMXUC7GKFNr+CscAVUEWF4cYza + + HzEs8ziWyrwU+VOaf90Zltlp9ciKbw7AyUBX3VvH6h9wH2Aj2MADsIjvMxPkzNh/ + + 6wlnGR9DqpH/jcOTSrmnS3hsqWdCyxdm/S+9yMYJkBzgzDFBkh7ze9nPL8lpiQpa + + wFDhfPJOww51nFfksQiVBlMjh7H0XmC7NW/KoZBGGsp4nNmIJVL+d5cehZ6GB4B/ + + GIhVz8OAqRtLNU6GU3e88dkLZM6sqoJrw6KOQxMR27EydgZP616gOMEYaJmE5Ghb + + dNx22rkCgYEA6lGKGvs5ljaGP58jtENG3hXk9DoQ9peVvYPb/BlRzEFIY9PdNamp + + GGpDg9STFq3DWL5/o9i8ltG31NZbiZSG2fBnpV6oUbUYTg0PqBMTzIwKSOt6PaAt + + mDzU2MpCR6HwLBi1uvM60CQDB+gQg73xPp9d4gvzLgrd8p4iaTYgEkkCgYEAyXsb + + G/sgl6OUUEo1UwMAuUoIUyVL09sqxDzMq+ru0dAeOuavOBCjX9Bk1UtKH6nwDxv9 + + vpkdgw6hsV/hBJmY6GIVhR0QBIPNIgo6Y0kzq/pVrC0n0E6ht8ZMf0y4kFbFPQb6 + + 8eATpd5ORQKvk+D5Iwndy5kaKZUhLzi0UYK+oJ0CgYBTyA3ycct4a0x7KSKyDLAl + + Lnzr2mtAUJkI50HcFQ2LU/hXQWTCEETW5v/2/iYNoNnNPGgVJKTh5GCvqGmYetPw + + zyWwGnViqbbkCYWEmjWlGJmA0zmlGUXUPkP4s/EY/c0LZ1ZrXxazX3z58b8d6+d7 + + da4y6gTsfJQ5cNNq/SBgiQKBgQC462ooNkblplcbkeB7PghOB2q4lUSRP1hzH7Ji + + H4/ttevo94zeEjdAW04QjbeMdDZGR9SOOI3jmWxCFdO6mxbCQjOqJtBqtGVz1ptc + + QPVR5ML48cDW6TR4LWJMfCfxIhKJPnzXvmeKFw0TPbHUMem3hPiyQuTGQX9hjdPB + + 9BPt6QKBgG3t1vLgr3+pHCL5JCKyS62AP+n7Fr6RjLnpzFPHLW1MtJoaGeFlEaP6 + + zVuwxVY54BIcxMLa3lZiuQBxUiU6cM84wvs4A2bHjUmjFnL1FyUY7Y7Wr/gUUyB/ + + eBKjH7ED1RMIqzY9ewqF6RyxsLnahfSW5BDfM4XesQCYgOSs/f/3 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:2wvrzaobtfkoiqeqwryjzvxatq:7zzaycbdhepzaqtdrku2sbb572h64ggwstu47osa2gn4ol3eglmq:71:255:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:zbygwa7b7p25n3zxovsemlz7s4:5eklpk5ywpbaqzmobixzkurqsccvzrsobgveqgvfa4mnslut2oca + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAnDp7uPJokCdVpnjWHvYheSiWbRyu7eLxgIyLBNB2MpvIeYGp + + 8niIIfv5LlsYmmw8pZmAwN8O6IV0AMZvT3XENWhCWRfayIOzTx14NDyR5hGoe+Q+ + + pKVESHfmNXsH8AqhR2qY2SCeYKOlNGRBUqj6DqAGDiI92UR8FWg9xZBCSN8EdqFQ + + RSKNM1AEoMa3OC2rJdz/BOlplbQrf0gFUBBDW1VzhDSWz4TkwhKtMkD256RG61q6 + + PxWMkY8/dI5jbsWoTGRjV9HFBZDx3RvQhBvVFZcS9TPjjHS4wQd+3+8s6SASdBu9 + + PtqRvUtbwWwQVBYBr1PlJWuO5eYnfznC3eDNIQIDAQABAoIBABZ8kHxRX92H29sn + + P2KbeLvwrJ4t57vT04D2ObhKrQihxZw/no+I68dAdmBGumbXt276hj68nG+5bbYC + + 2ditEb3CMPKT7Wi5FCEKE9go87MSzZZvhti59PcdUuRVvhG95fLak/+Eo2czhr7g + + w0o7iip6vARix1Yzdky6gVGjbvb/8Qm2W3TdVfxnhZq33SkSHQkN2VbMihtkqqBr + + UXAOf74Tz5xKTiRRHZCMP2NU8PfDH15CMyAnu2dTl471haepUYzq2nN5HnYxNTwl + + CJn7AI+R8assOiODwCIkwPWIylmk9BsWJfVwS7JvNBf2T0frXc8VKrI85BDzZuq4 + + 06XGITECgYEAvvKJ6tO/2ggRvdmqoKBl312g9dH751nOEUbezEA/t+WTvEALfmnZ + + LsFjTOLvlLFRo0R/Wt/Pb0ZY1qT4iA9wsA314t4I+qu76+PoCv9DZ2VRXvt1504h + + /LsgJX616FhFtux/sEOvdIx6n3VT//5yshFhwo/4aAYGIj60y1kerw0CgYEA0XPu + + 352ZqPHUu8sq9q3yBWSqXxpKAA0XMieIPxOPviqtBHkqMj5W9bTdS/eYsjmvgSza + + Tb/dV/dalqkSwpAFA11HCDcI3ejV0252KO2HyNUIF2+bzyVU1W2FyFCz9yCLY/gC + + 7ruMWTqde7PVpg2KMBi/2ltGhwgODSxVyidFcWUCgYAw+XIoOaFGYbVzNSXPRvR6 + + AsCq6+2pG95/jebNClmNaCOpL+ACz1E17cHzUW1TfNtMfeAQRcElcCyO+QcJlrQ3 + + Y41CX+J7sJplWTIFyAzYsyLYsrQ93EtZUAFhvIsZibJvxV7GrcWNpg45YdVmnjN6 + + unyRc22p+ImQNPcYBMaa7QKBgQCMd+PLtDZJR2YUS70UkrOtSkW4Yjker6jOyhRl + + uQi90IEYbuoNqCFJx3JicDrHzEgXqaz+V55qUElAoUMjmNLD3tq0d7RKnsxIb9xu + + tl5KIhS7Iu6rja3HNRxzqywGoJza/ol48e6+KMFVJNYz9wCmIPMJzg0OoihKTWF7 + + obrAwQKBgFbXt9Cww42MReP5aOzcn5udgNQ94YtGuWpfn7xtxi5pD2BjKjH66OcN + + 2iUReVkhFsjKo1G7QVG4p/QhK51wxtFlZiuDU7AW6gzDSMGjeZQqB0HEtFoPdaPK + + c86Pmhd09zlzQYCIaA9tZ8vbUBZ0jHq0rBUPuPg+kXVP7D/px0aS + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:oojuwcpqotfqvmyuhc245awdpe:vzxamqps66hyemt4zabbos7cufrc5ugi3ii54vsfqeqsmjc5ezjq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAsO5RooSEJraTk5Cjb4wZd8vjOixmAQwBXC54S0di42ixXyhH + + xHCLhjK1TuCiC6GaHdYLXAc8YW7RstLhxdQ1NGhCljxesSedcXqvkcfKKyxWhe63 + + 06gCAB8y3hWTEgeIl4ZBlTo+xx1phtpoC2ujGsIgnrwLcwJO+FSIRUiLjCfC5OI6 + + NACIlx9sKopj72B3N+8TCmqUji821/+jmoiqMT5hRsjmjal1KNqeOczC62ieHD+R + + 54vi7EkFjZGRHVpRgwVyEvRhy7y+RJW6ezfkUKW+JhLZo4UfAX9AMPqwYS0ZPYQz + + 8++Pefs9ULQF33UYcekyV5H+1Cdf1NUwEV1s5QIDAQABAoIBABtAOZacbnY//K7n + + wiR2IZ4P6ymUmQlkPflituhxUEvSXi9X1uXsp7C9sqs5cfv0ofYid5FvE9+139p5 + + HIkJzEAMJuVY2wTSIy/NQ6liakMICzOJtwqEf/pg08bc79ABFQqxhPxlAjJM12oL + + zaakp3SBneCU+fZ2zo71BiAVslidrUWUPs4pc722tln9ZHVchXp8RylDk577GoRh + + paYAIOAWdaPsSmLTtju44Enpb0wmHF9xt+rQyDvNgyRbsDXGg3laU1V7ySCfvKjL + + P3P1GpJmfT2hIMq1uBQWn3adRUvsxlfJATWLEJH8uIgGnRj2rqI8QSJGKdrU9Eck + + 3UzsNmkCgYEA6zqoHJdD527EHVtB2NHgQgGG6mLVv1pE/+w8SNUQMYc87ZQyLZVM + + 7PZkOrZGOlL6Ns/zQ3j0OP3ZhjsXoA30gFLVMIby0jmVmjSV+i/CwOb5IvvT6vV8 + + n01yQ6rGGbUPYqoMffS1SxkoJMZA5pIe887IVuwjwWcmCfXgKIhpLuMCgYEAwI3V + + kpHTJzCC+MPtiN1CqMkAyzvtk3ON3D2tSgqpppAnWVzRTMzJqVVu7qClzJM4xp5D + + sxqgt3Wrh5flNPD/BS7S9WqNFbkwFhmjh7UzijDJYBHJs0l8oo4XjFgHWIGOt7p9 + + hNUR1nwusFYgAlmQ/gN62ycS1V4Fd3J7YkjAN5cCgYEArldKE+604EnDRrLFSeq7 + + mJBDK2LXYzyHWVsAj0aC+wJt0PP+gLRgUFyJis5fnIi1dHyJot95uufCGe+gIftV + + 1OoPoijSvab6T1FcOxK8+HX3/srAlSsfE362Cpr+ujzsy0aXfZ8p4yAhFahun7V7 + + BV6kM3BPS9+kXMuEOOZpdtsCgYBplhzz91TDG53mDYIWV8Xyye3Og/kdrvKuP3/j + + pv8qX8fD/9qhc3ZtjXR8E8l26Y/rkeNrtgFFOJgrjUZZhoFA9VEm1BuzOs48gCil + + BN7TOzdhn79rubNHbAVLpwW4Kar54qBrk27pn0T22vNIdpbEQ2I+BCoWqCz1N+ii + + l2QX1wKBgD0xAfQZ9D+irtHqR4tCSCznbqmGqCzxA/g3PJeCDf2cNvdtO713i/51 + + SHdZ2RZI7WitU6ovMEyAXP22tFXa0GL9UHEYszooVegMx5/xR+/z0fgWQQ+IQuAD + + xXlJCybYPBqfhAsEqoDmQp/IrCllKC92U4oM45kDEfHxssZ5aXvH + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:7wi5xn2uwerkjzqs5ndn4eimti:llrws4uig2fpi3rtla6lk7m4t6zudjhszdfjgqtihghfrvs2robq:71:255:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:lrrasvfrww4coivsbcorx4jtxq:phdrpge3wvi4fiabhbo73jcrponuzqz2js4ow5vd653okjkilp2q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAlWJVkT5XFuo8cXgSi25HvT9nFeNuNilLT0u0dZq7uKrANJlG + + aNDF7WU4xWXHdiCod/qiz6o1kjyaBiSp0Epm2xJCJvBrNlEhRp2e5NsAMGZhuHeq + + 6Lm9QyRE9qp0NtO9KBWyfh90r29MeQ8jZlnSNHfGE7FHYrCTtBr+dvT2WoovzbI2 + + ZhM/63HVX+PMMIVYQWTqugBtznDzUNP0JM0rpkCn+sMbSwEIafRf48LG92bHsaD8 + + yIrDeNA4JRbG9DlPZLDEcvciIbs2kJxMuIKjyLq1C/LU6PMykcWPr+tjBaH4p0Op + + yUeB0OXugqACzMMx4ZgpKpHWYPT6gwgqjJS7WwIDAQABAoIBADn78efPUWGxKSYI + + K/aYJ1uDhUF/RpPaYoOUiKcPmSccjD++cRCVXQaBQFCK6anmEk6D6HeAA4xQXp7c + + 01do0dTeGPRhZNQwGKD+5KLDiSbATtUaCiqMkjTCGsy+LB7uAGHTTjXbguDn7ECf + + Sifb3JaGGUoiiWl6zdJemgBVpFxO6F8ueGWKywCHX6L/5VLMQQvAAQaxEMkLiEYL + + Rm+wcAWuK88XNETTglgevCmuZDb+0H9U+9Vbh0wR74+tb2XvBsxw9o0O88KlFaSN + + mrCrH40p+ShNumfE8QbHz8ch6CQTZpPLdC9x0Ziv1oUo6CGAOA1IGmz7rMyWjFu9 + + 3xx/JH0CgYEAwoXBg2lz4YooGkw4yEdzXffJXaYxvj2BgJKUZyb/ZxRUHxHl0LYY + + WZvPQ5UyOZDqmqvkfMYJRiN4rW6J/uPsCp2NYdXQVRngt3THqKeHii71+xRuBObB + + qNNdfyT2HFuwbxELM/1a8r5QW2ebDU8eLlDbiYOEC6Fn7/foxM1uuHUCgYEAxJiQ + + wMs1eu/dG95kQCiYX0EjgYmhNtQPhbom4+9t6oIXl28CtCmVhYDfJsI3/qVYqXIl + + OqTOW6PLaA7uuojeQYmq9ehqldi5BHavs04DQ6nDncBIDqI4NlNG/EAWxQQghG1j + + PDWUn6wZMBdGyAKCX/fiz/8mDBPnlTm2NdiGqo8CgYBgI0cesZGKGIP1a1Js+ZM1 + + D++/jxHqme9VIhyiVo3H3i4tJOVWH4ktUGpBVo16EftA8k98s0uGFKXh4U3mYbMZ + + FAD6J3hNdvqu8NJ0ske0rbz4mII/feSckcoVuqjAHzi1y9Cjo0W9zv1cD3p8O2wJ + + LAE0l4E9VkpOOVIbYgSkuQKBgAZvO+WjgQeaDDGaUMusyHftqNzXhVhHDo8A7b7u + + Gjnfsif5sSv2ZHdvJV6eYrjJ7qH1I3TM6hgjv0eTnYqraiLY/6h2x+5JnpyfydZj + + ikXPq6BhJ7qa4p4ckak168jc/rd24RWaZ1fmiRiC2oU3V88OTPUj07n3eM/wiJ8w + + jA/PAoGAVPnLKxls+vDRSdc0aWW8Ql2yuiw/zU/GhncTfwfiKIrU4sF5GW//n6J5 + + w9aw95QBMmBRPS2dSyF0iqvK5Ny+EXUzVCAVi3s45o/XlFz/RxkrljibI+5eOBGS + + lpe0EC6J/AhY2/6/5213nDPBoJKrqD6kCq3cA0V4ylvIaXoSjAc= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:g4lr4g47o56kqvgsyikfj6ksoq:qs67p2rpyurqsuq4ivtebxyxyxi3i3qqxvvfzlhyk6nuumu3nzca + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAyocKsAG2eamQBV0FKLNCo04WL512g7j/7OeCwMofs5xmj+3C + + 2StysnM5fjeS+zGHd7VOanAx8XbtNwwh5Mz/h0c0wi8zKhro9900FyVQklsa/Vnm + + ckOt4km7N6BAaW/6qscFcf3xMM9rzbvEv2VvQsY2WTn0PbdgNHxBQKqmPyeHhfqi + + O68IItuJ9Atnb5nJYm09+FAjAAIOueg8jxCoqJCvPD/LEsKKu4mxS3MJeKG3iqag + + Rl5ZJhMbxJ0bBBxm4BfrmSatcbyxlAERlyvRt3w1Y23zXhJBnf/krfJNlwYliu8c + + e8sH8NbmGGEdJHw0kA+1Inm+DJTcO7EJ6Rm22QIDAQABAoIBAET5M7cYhjwt9roU + + 4W5oin/SVrT1pAidRy+38qxUyfIiCD3pQ+wxI1lJ66EkLR72UcP/j8qpFiE9lvEh + + 5SMme7nnEr01VO/4hTHw+E4Pq76EX488AEMW8I+5+5Qos/cUp2Jk8GJPkUZFxdml + + oo5qbbdoiNbfaWJhYtbNIG31EDQ+V027Zd2A67QzJy8Sl0WdhvkB8jQaX7DOe6X9 + + l2aFWxUH+zUx+T8/2tfH16OYPCLPsW23IbU66Wq55izeu183Q/OzfgS/tXX4RNpg + + i6zxihOVPpMf6+4WVBh560vW9O/2ehIbHwTsm1yVWcqYgWV6YDahBBkO8lrqKG8o + + vHOGg88CgYEA1yRioqjxZm+CmF3y7GtXJsFnyBem55OSX+CFaFCUDashKohMw+Pj + + KWN92PiSpIC/PliROd2sm6BSw/RBe0kTXWZAJ//TmHo81dCdh2B1KKSlsjZecOPJ + + N0r450/L3QtlzTyC4iGU4ThnjXLmqWK6yM1XFn/UyhhgGpZsr92jrjMCgYEA8P1e + + T1XTv65k5YR7CVfJHhhcFWkMJmRDFU8h1jW6A3VIYXXAlx7k3Ju0VlB7FbedmyWz + + hgEL0Q9Gt+7y60+3dMmmeFk9fkwto6g2WqMcrxr0cl5YqFtHjYp9Q1kFL37TuTax + + /0s99AKkXefp53tDy71ilQjFVsGc2LUq/CrR4sMCgYEApGTbMeviOiHvKrpvS5Ri + + De0vfkgEc2PiL30Cs8kOuLsRJszry6uxAwlROqAGfckbWWqX3h2zLV/+nllgR/J4 + + 55+gWnAzoYmWPtOf67gbDilxq5G77ItCUAvr0eS5pHh3G7KnWF/MwaQ2DHHGK5yT + + mai+aSTY1mx10xsqhd/YmN0CgYBh+WAiOO6Be1Ehzp6Gyd3GEnk9axu5cAGl5CoJ + + gIZDaacnmEvYJIM+/T5v6QBhb+jvboBx9nLrZ56EoOy5pgsbu++l9gH+GtJjOrv+ + + VVoQBpFi/eBlcdbBQJB0lPh6usExB3+OHvTtAzX3x5VcusxxRGmT1aEFCGnP4Le9 + + FVuHKQKBgFZTLR0b+xCu82iNXFdgFnpkl2AhG2puinsGRhqhRaafb7Vt00OL74Ur + + TmyjiGA50sd4dzJuL0//CZsapGnt5yDqA2wtFJVF+YNw5ZJRVbFqihulfR7zz/0c + + QbIo/GGC++g5f6gU+PNlJ9yDlZrhKSWmaECyGDGVvqrrPCqNp3e6 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:6nvs23bhrpiwiz5prqdtvztujy:wlg7g522rpdoitpm4qwhmctrjhnh4zfloiq6uq4tsvaoawg4slpq:71:255:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:nana3u55ewg7j2t352qbjqokaa:s6i42emhgzsmtxxhro63znk4cklea4qmjn3hwyvha6ckxk4ptsbq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA4DV02okqw3N3Kia2PrPCZrjkTklwT8WV2zts6g5i/0UKNTTt + + 75IwvU7AJJhMsCvPSh9OrCeVE3aqgUyb+/oQ1EKD/U+hAEVc1SNP3YaNlAWmK0kw + + tWbTmBk0WTIm4yFwuVVAXEOWJF+437l5Nramp+LLrP2sS4hAOwm6IYbUZNiL2xal + + RO3S/vkpCFx0SmZr5M5LbkfO+YazS2abU9GmQLXY7ZajS8pzb0us2MrqCbsFfZud + + 04+zyDLuAJb+RCFx4zDJ28zK9haqdhdGZcHfNjIu6dn9StEIMwsUIPJEXxzU+3Sd + + Z13IGWWOOOxnLeXcTH9MBmnkCrc5k+D87aBYpQIDAQABAoIBACnzTpUqJ45w7wm7 + + uwsx2qyaKRuNyZ4fZ9ngfVEw1myRWCba668Q4R42myRtu6GV3N/vSirTcCT3ZdEy + + CpiDsjzo4iXWDZeNouA9Tm7yQ1DAGtaMB/lVDz+s7ZrH07dZNSx0K0noGnJdV6vC + + mg+27qlIedf5EdEDIhN5zzIBNoHUmfEK9PCzkvJWsjpmKYRl5KNWHhCkj303wyFo + + LhkwIjg0Hh2zjwu21BsMcCQ7AAwwqPCr6QR3cV1bhuznBu6TQHvFOEVY11fykUfE + + Wb4etekeb7/dEOkXf+9MX+O0TDMdZn1LG3MAqEh3bmQnwK5HdedpxVLY8B8uIb2w + + Rq8yk5ECgYEA6xZhNg4+FnydGZhNexvn9D4pKO7y7V9Ylsxi7655YOj0PMSPu8d5 + + Rlk3sH2io301PuevGhDQlToxMQJinSCBbS0m9Wh25puBDV9Hv6/isXCLSykM4R4n + + fr3iXLlBy+yaAX0FSmDYOLtdmRic+mLftg2vDPS8Y67QeFxxBsslANECgYEA9CdW + + 40AXX1DUuntO7UUdv5KruTl4ERuDfHA/bQHHSWQhHbDQJih3PSICJxvcOu/yAUj6 + + s7Jz7HLbwHBt6OKReJgWAsPTI9xya6ktWP2AhX70cg+LAJUEqjPNVrdmO80cOpCx + + 8CI32X0iKpyKosPO25tyV24dsgtCI/64HC8Ir5UCgYEAm1FO6qrgRHUSSk3AqxyV + + 1F2ZTg0I/OFoo0DoANjyIp/mdZucJwE0U9EwJO/smz1nB2eE3aDMXjtzMqETzCIk + + wJ/7RFo/bD7DNbWErtWi3X6w2PiHJNiKWYdU3dQb74IjgeY6r5hqYpkPzs1fMWJP + + 0XUa+WFccjOWUl8o4ccnbHECgYA/b8k/mnN4LIRZP5iuRXsJP46mvavYphFvz6pr + + JD8nboC8OiibAYCZvbBZgP+jwJxcgR3Ceudr1BwM0Cl+jP/HGZz+cur1Ml34YyiJ + + KrSt+uKAkFFJgW6I2pTLpzNE7nIbNWVGQ13HgJ/T+oB68e1ZWfZHiTDmBc7Vk2U6 + + zW2wUQKBgQCmt/ZrSCin2teQOg+rqcmicysXn3/DkYYwafeTJa52OJV7JQTWK5iZ + + vJlkfKHpqcmsLrcUJH2rRlcOgzrjXinaXGkFtvCaWtCuUUJgTw3n7SF3chOUjmRT + + SKL1Ay9Y5Dus8UREJ6V3JchkwgIZcUgmWgRuW6YHdjCscWNOiD9Pow== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:2qmpqupyhsx526l32tjy2ouhri:taqkf4pffhgu4iy2ddhv4ltt5opsx6s6l64exee4c4vmte55adzq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAsCZMCCaVWiSLYmGr63IC88oMBAiDDohGPCEAS+pgXNHpb2bx + + 3rRv3jqtMgAlKF2bQ+zGXNRKC1Z+b0XyDxBxLtDmXVhqz7FTh4Wsv3NKnNA8Lu0n + + m5/49C9EXv6RrLxk1UQJ88R62yL3/apBgS2bBC82WlyxjyBjJhv03B/6AYzx8kI9 + + Z8Vqj0DnstVpaKi1vQnoJtpYvTxiqxzK9PS9wKV5hGHEIVqD05Z1RoPKPPHkxV+t + + 1UxbggtnME5+SfQ9NQ6w0t/+aNeDRWc7dGaLyJhR9FtASuaqjsORutFXOauAXxpZ + + 0Pk+OLZs8jmvjyklucoNIQ7fU7mNieIO7EI/CQIDAQABAoIBAAWQUBp5zYHZYaWr + + 3BhFs54rpZGDC1CsMTu49x9uubh00OC56a3VGSt1wv6vTn0l57+PfPx1oBkXlErD + + dM/Q/yIxavVL06PXwAGp0TkC1Tp6wUviJbweo2hjDc/KTqOcF7s8uOvAKvk884RJ + + mmQQIrNRInBcOSeCKF+NxoAlamoeEiPh3YU6T9PMHeJkyB8vtaB3td4+XQTX3Qg+ + + gaajC3cwU2fV6NEU+apem4dsn4TrbHMgJpSLWxof3XaJSdsAz8KVV/T7hG4UZbFK + + HfEriY5xSNuv4u64vikNPNi8hHaTaU0KAa52VB1wVzyUqjfSaotwCL8acjg4Lizn + + u6VO+7kCgYEA1uc4dVic62SSxJxoPoojZu0DrhEXgvadFAxN3X6udkYNdCs1Ox45 + + PuPUpTWjvLuaVbmEt6mU10tv83A+wxjWOcJXetHsWwPROv4G8xPO5vUgVyrxysLm + + UxCMP1FE2rHaQpXNYtB545V/SV9kV/+iVxmlGJ1VzWKKs40GXVwESJ8CgYEA0dXb + + 2XxB17O3FK23zSFS/yVwivjLFq2IEoCwhHJ6dLa5VrRH6NvUAX4xYIKiWQBcFsUK + + fOMBhAe9Y5+RCwwuPmP8ZnFPeaS8mjAmQIzuXxPr0pjXM+j//D+2eAL65oFm5ivU + + LB9qAtwMQ9yNwtjotal4yBl3HP2ALbPnQCbLz1cCgYAYjdKllbpYKuWaEUTX4HCr + + EemZudo13HeWEtHSvOayHM7stwMd/hYMWXuyZK6Qod7AbLH9SiL3dmcUKX8CS5Qu + + hUX5goK+43DEjMG+hETfnqJTU1TNFfe7BekAUwjK9Ac8FGGjKK7EkhA5Ee0lINAr + + o4J5jYCANwIiAbr4b8sNgQKBgAmVO7od+5/PPFA8csVyfSjb29zs6dF6UVmO+QDD + + faYw5hv4lcQjrfX3fmfK74EjDBGaJBV6BIq0E8kl82jOwJnm1RMUn62NgXOFOWn/ + + Ra+f6Egw5LshK/eoLTwj3rOCO2HNpJ3zPVMuG31J6Et6vn31ZGe3CgKP7TepHKmI + + XAx3AoGARDvoRZiLJEmUDQOw1mI8NtrvD2oKuO6YkT6pt1eZhqPN6SMDUK+ckx+C + + nG+2loG32i9F8IcBCFWqeEXO/C6jvb1df3tcsxtaJFI9L4c/Nhxx15MQAVhgpwaH + + zN8TUe04nOhf0OZZebwoDU/ZrLY7OjiW/vzDmeqXOjINS5kbxmo= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:62dtbeowncjj62jnwbggaufvbu:6r2sapg2cm6dvmylodyxabrj63a736uouzsqyacnimgo4svnktva:71:255:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:xann47c7l34cwixkcegyjwbrzu:ohhz4cila5kkv5ruixjzrltgx2e5q45bx2bfjpjqbyi6mt2zfkha + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAvSRDhsaKiEoAW8+6Xt0bjgxl/FPZxd8iSWdGcibGedmJsvK9 + + hpAFDrqSFSXJ4pLjabqvhnJlxhc1xjlqbB/JuP+9eqYxm2FSzBZr5F+mezE24zQ9 + + tqjCHxbm4JQmOgTeotoum4WXS+mNp0YQSm2NDil71mmN288mZMGt73GN7sYz3nti + + ubABLMONRwZqN3tffAgzcTaSKON0k3pimr7CughlTGSSbnQ/Hd+G8jxiSTuW1/8i + + p0gt8NvDw0WaOxbyG2JsAxqG5HN0ScbUlCMEwiobSxc+ajAy3oyMJGbsPMqTPT3p + + 0ZKiTJKpA5M0uMhF2rQd4F56FKo6ZjkYSFDTGQIDAQABAoIBAAI8Xc368woSy3ew + + xQe4PmPXkq10AkscAAhB5ivIRVvAYUFrxcDDwanyztipv/3jjzhubzYijEBv55m5 + + wp/KxzQrVb6PtpHOVmlSMVSB3iWiDcxYXD7LnOVulfkWpAlwieWYuNwexqYsX+Yx + + ZlTmGZ8OvEeEq06E+UCDDf7Ns7tPhRP9SMdt7QpgfyL8rWsqvh6i+hNaNFXj81Yi + + xp7S4qgLJ2XgUhyAuQuO+tJxlWVkMhWAcQgKiEWDZGMTDHhm8+v0elc4iup7J5SR + + 0a9KKlwe8iBwihRyvWTXgf9puiVoGmjQPT2OwXqcrYwMBTIsf281am37Yo7as1QZ + + 17GvKTkCgYEA5QHevOUc8DqG93qXgcT9k9x6JWnRC6YmVWhaERDRkPANNCiTRcBW + + DAVgL6O7lZav9qq0CRXmF8X6Ukdu1MYiYuxxxGgSoKY6WqIcaKGqwTyVUlSe6HJk + + +9mSbnCbE+fdBMYhg6CcIeOvoTeXpFerIeXxqI/N6d3FUbA9MdNhlaUCgYEA0295 + + /nPiDcXgv5sgF/wBL9sR93MQX1IqyhT7Y3t747odvkxkBg4aQFpZFM/wUEIQFBEY + + 9adWSQq07nifLL0mrkazF9wrDBJhyppqMnqZStzAjdEj7qxYb3/e+RTf2c6/r0YF + + 4LC3X5tLd2G4d+UZCkcoSltdmDs8ncOkIlvNVWUCgYAVB2Dus5M+tAEkxIsZDX/D + + jiFhQiBCE5W9jgGHQ6YayxBLU9aCNzEvlWbJuR1GlTm/StmRZANm93UPDSQuQaty + + rgecY3oiamE9ZVl6ei315JxJnR+idK61ObtqjMiQwV/YSmFVdvAfZIsCINq56pr6 + + V+Ui92GPMiAmaiqUYra5SQKBgCjvHB83MDyaYri1v7DlCRXKw9+0VycdMUuOZF0O + + Ox4LmlaNU5AYityKoVR2LYBcSeCYrsxgaUQa3oyMrcRrmmGDLokgBvV/WY9v9b9w + + HN1xf5X1N4+trjFoADMY532zmUjFtb2aeOX5mtKyCJSttftXa2V56tTeIw4oIk7E + + lyxBAoGAN90N6kHoe6KuTq19gc1MGSy1yctOk9LskE9U/9kZoNBK94XukC9jTFZa + + g5VhtchWKaQmlKIhRE/m9LIIoRp96EBmDMV+VPqNu+xqGGHCLX7hofEfYDst1YLH + + y8TOOjHiY8XpfqOnftV4ZCRKrwR4BCIIsXPKJ++p1U/mK7sw6XM= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:opuv6wbozu5pmpb2qfidrw5wfu:x77l2jh4dvrui6plhqzcip5z2f37bdwj3wivq74w3khga36muzoq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAtMN6z3XTb4STPwK01804o0QpJgxm5B1pxh5LPc8DEZIN/iHn + + V2wNfPlqoUGNT6/p63eUrJEQYzCCt9A6YlzjkRrgaYC5sqmSevkZ8bwX1QsUh4ts + + 1eVyb1idHEpvglwvZkxlq0JOXcartlePm4pGlj7/DxkQs44NGOivmg7AqzKILz79 + + VX9HjFTUYliglfcPsDUyulNm47qRSEfBKiaHHdszul1hLhfupVg6oNF3Q+s1ct/U + + 5avxFEfd/1DLz3HRyIkI6I5f2bshoS+cQ2nM7I4/y2HWEb4ed0yEztbBCauVKNdP + + 83D7GSJAfWvQoAjTJeAqqZ6N7MNMAkfce3gTkwIDAQABAoIBAC4/IOl47KpIUd+6 + + EohvocDrjFeGrsBH4irkzz01/EP/iQLuq6BLLbw+l5BAFCZCDGfIxUnNJ1MpMxhR + + 9s35k+Mo7Ccx3tCd37MEjiWxiKth1VPEUQj8VeW01yVIyfShHyNeAljpcuE9Fetl + + xYD2xI5l+Z1kPUii3Cj2Rw70HUjvC3rEAfbdnr/larJKPajWHKE0uCoSX3GqX7nt + + QtmfG4KrGMz+xXvigLH41zNHevjnvnqb+HBVgOAdHo5Evh2VBBb+1I9l/8tdjEYS + + Vx+NAal+kpHXZETFmflAyLRk2whcCyQtuhye+ITJhMAtBxvMkm94RC6izoRRKPDy + + XxOxRWECgYEAy9CWVhzXrr6R6hQKXRBuUa8mV0ogWj91kWYF0rSMbm/SORBBIUrS + + mX4Cwj2YqqdSKmNw8mYvBL67lV/sQ1h67Mv+g0Me2PojqRUnh2TjtcxyRhhUGkRK + + x6DZUrh0WgybPsK5zMeT4G+GtZvzeBvAO/D8FOVE6H0zytax3OwUTKMCgYEA4wv1 + + m8WtVAsurwJVKmtxyYLsTMLeLnW8NO+STlwqfBQXzBxWYhQJjJmfYWRbSTlUPUWJ + + UCYUNiF0Dusp5dL3yPgpDrBnpUQ/uw+Cza0B5V/Vrh23kvkicABw4CQSQOwCGZkV + + CL8bnAxI33SQ9B3PHTqunxrb/NAqq5FvP11OHFECgYBTwmwWBZJpwO2MSiIcLuV3 + + ckiKdO8ox42UbF4WQpa3yAKX6uMpQGueItgVZWT5NPwiaW2AYJgQFiZW8+3Pm2wh + + JpB49zuVJe9DzGrLTJ38F4Ia5mKhzNECi0rkoONIIogmWbYrvxU5lfvBZM7A3H66 + + 44VlPPd9p/6B7It55BdPiwKBgQCZj0wld/Q75HhFi5lYYGUMOo1heWbWG3EYiHP2 + + paViWCCkPwI5wX2X54sBTuPiyXBtJGuzlp2S4ttg/7JNq3tFJHp4Yd0nzNohxWLd + + gsbGgSO/aH/xWqjtAY9WOW9TE4x0DbJJQSAGUdSztV4YjVS4WykhmQPyoERL18hb + + HdsnkQKBgE9xTWmSxMInj1Iislc4Ru88KyGMVgpU1/IEQVG4zmu3js/KgHteBjPq + + EZV38+EW/RMblqDu6883JAEURnsroLU+KWURE5EilBr5psE+3WHkHqUVDiG5ghtb + + TRXTovFp+oZ2mz2O2UL2oA/iXJES/fa+B71ZaGdqMt5iR4a6/yW2 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:hk3a5ync7y3dnwowqjqoa34eae:y4f5b2xqa3lslh2vti5fdbho2syqhbj2p6f3enlhxsjbfpt7zuta:71:255:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:7hnqxsumt4npusjqlbhmmo35qu:e7b4rmbxwbgrhguhjfbcc2pywgducrmjdzcs6opoa4z2dywalc4a + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA7VJ3LNata8TXtyH/4NhdD9I9oIEV3zGvsKLFSzIjUWqOoM3X + + XZdWCl8q0ZC9NTZdDUNDQmoHCLNGVQjbeXkMI9G4JMGdVxafHivxCpa4A1HAcPXw + + 1Z8L09YIXQmgPCxOiCgvdCcaVNxr97PiZgndAiGr2XQ5XU52YWm1M2F7bPv/67FB + + kaPKlS4lAOVTQ76WKS6x4z1B6HpVQh9jQyvYYlfmmY1zvzIJvBMmyfMxLQpgBSe3 + + xKfSHW4Ow1Kjl9WxhfBw71hEr4ZxX6GMLpFhW5aPtmUCZwl7FBLQosC4IJJYgRol + + FSc5RsdvRnfPYbJ97+qnmpxlRRICBm9MCXiZhwIDAQABAoIBADsA88xcG4XdzNwl + + Qd7/LDQQy22qamuxiMLb1T2a25kUax2jz9XfGG8/tf+ggspGF+CCRqiuf80z9VqS + + 9y4+YDxPmf7ZfGr4ntr7hdRiIKICo1vyacxS3LfwUOgAyqvrQCMuCo5QYoWSv+03 + + 9iP0c9Rh1r4b3V9LcLdLdtetduhjTGNfPE0w3GazezdAmWmVeDe7L8Fts6XrDdYM + + 3x6Z/0rk1daMO/1j2LFfu0bbtWY62m7++ZlFbG2vNnFmZqUF2xxpCEbjIm3PwshA + + DRKISHqirfQ3yCMjNgn4kHUOFAIMK52IDmplb1I2gknoUKdLlXXuy1PuEty8nOu2 + + QuPwlNECgYEA796GhEQhbkiP6UYCjaRkbpJ7/YEvwYo5RCdSiNvfLes47OtwLkK/ + + lsfqvqPclG3O4AZDDTW7QCqiu1cW7tx0W9fEz1t+yHJclrIYG3GcmN1TtXVreKfo + + MPgxNP/XzmXMevD5qPzETf0yyIQTyHaRA2Yo2/kev2jRl0gqu5kZ0LMCgYEA/UgX + + Gv+QGUAVEy7us714+7w53IABy5mRq29pAVAfm4aMKEogX7LPjYytMEUmWdlnSuzd + + rltH24XThnGHx4gfQDbrXHL1ln5MsUtL9PyY2yzbvubr9TqZhnwOcPhvChfH8dXT + + 0H1BXTs5JBDwEZu43GVNgxCMNy1ck7aVBy6MVd0CgYAzK9isjNBI86fnzuyqhOB8 + + CjnzScUDV9aBqJXd5nIFHMInIM7sv4aZxwpYIyLic06H0i4pukW5GZ9fseONj3Av + + S6eLyOwSHPuNlm64JBORNN4vvt3vfnp1P+1XbiD+wg7OR2wrVckXDiXwSuThhhHH + + lNqwmsOpd9YGnPmoza+JKwKBgHHthm8fe4rQF2q8lqSE2rGpNgGoFqalWi/Z+kqb + + 5svHVq4cwbkqLlAGcjSfNiP+NYcvSnvOFWF6Le5wjNnEsgHpci7wiuV5xDePnggB + + wyP7ZpDVQFfbVwl2LezE4vWQQuDWBOPoI4mzRP2jHMle2WVRr+7/d4KuRdEvtJM5 + + beiFAoGBAJZxp7CjdpRZv8nv9j30zj2b7C2Kn/fBusD9YeI3u1P27VkZ08SaP5te + + YrH+YndbGm0I0CYVhozsIVQK31p7iSx3jEBZTmNbXsdEduTFb2n/0pXQ8Ods8/iy + + JoBOx9z+6v/JMYxoKDbPEohDL9lT6/TbWAUr/k2gv+90rdFwVVQs + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:5udu4xzy7ffr7mbrwuxxzus5fe:h2hcxihkyq2fpv2maprwi32kerubawnj5yrpjcomxj5e7n7p4yaq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEApwF50oSlhVzG+vcDRCc1vYwk8pdlqMMgnqSHn4sj7zqNrXZr + + TJGYDm5NhltudMc+AXFOjStmNO6TtSsU/ttQtG7SJLI+fu6rHf5nr3c2AW1NgLKQ + + py47GId5AHbdyLJdVqUqQuZeHTHN+OqgHxEJ5AjYB8avGvAtOjGG/1m95d/VHe38 + + nB7rCIZtNomiO7eFN57T/RwBFCMazD7vhTYyq+bRb1jg/STG+b6kLl3jC67r3/Fp + + RqXBVO9WpHjwbGgSdAGR6eNt6jm2eXXrv1z4IFR4DdzgnaCtWZOIKmfdk9jLG6ZI + + xqwznoBq3ahG020HxQMUWHRljEVI70HgZBMSBQIDAQABAoIBABwK2uZXAKYinITS + + illcziDMUf3sHxVV4nnQ/bbz+a43YkfQvRan0eUGb30SiDsSo55BZOO+eFSGBQZk + + PAvJTsVlYGLqDSVqNRB9wfJMLaTSsjNciH6R/DlTsiU6UGZdUN/2LuD55q63SLM1 + + zno49bS1KXUwzwFSd/2wCE+DRag+BlETP4hCR8Rl8puZq/2KAT+e+wLLNyNZA+OK + + C9L+PgUv3Ac7e7Ll9hvhx0o3e6WKhus3BMbWyQN3fDUt31leVoROXnkvF1lORNtH + + aaCZxdSFvZDJqTtEZE+XMQND3Ea1aneiWVLD95Q/TwIlQfd6TpvuONxZ4npoyk8V + + 5CNHU+cCgYEAvlTtbjqSHCV0/3OjvXHNjnH0tTjPXzwJO/BdKiE+BVnVyznVb4UB + + ygcxDyblCy1zEBOxSszpKOc8kHUh2IxMVe7hLVIxjNjxZgKso0GhOJzF/Qb/tkKN + + H7EdXU1d8lpWewztR1p/ZZrZ+dI/+m0kKlX4cD2L7HcD2WXbNJ3hj2MCgYEA4KBH + + Rhoi5tsGkI/dGR1KFLKDehd+tTWUqO77hs/CCxEwLilVu43Bj8PmvAG+MazXjG4G + + N5RxAUsPN9VhJ2jeUAReCLCkpEKHJ/YuVEAZjwDTypAlgIBIc7tLCPhOYarsohUZ + + 3+LPhdvBoV0CMY9ZdhTXpyaghhqEuygcEoMgWXcCgYBSmdT5E545bOAbxPn4y5zk + + BvymcWM993YidyxXjlm2RMiODCle3qBqJzjZVI3ujejzvzggOFGwGLqmDs+DhU/T + + s3oyCwvKDpSlKt/1chQf15ntN85eMP/CE0GlLmBpP19sw61uXA4R8GRNETwG2Lrr + + TKgnPe6tzvDytkutyB8N9QKBgQCai2u+PYk50APKPlDeUJqBdviibbvNrRmkyRfg + + /twAhUji2amUqsk7worjW0eiIcsDYUeBwe2l+CB2R6baWHpsDzUrQW1lXihjRCtH + + 5/otu2H8AgTrTleK2JediklTRSgds+rjcMdaz4F/JeC2fGwOo/Rjml3jJiegJM57 + + piABrQKBgHUOJRCcLh4UEvI4qsKalh28maFzjLqv0Neh5ENTU2W5Mv1YSISjqRYK + + V/hKLURUqDl+1/8reScAjDNXIr0gXf9UGkdcyFWnPjkCEuu/hz30fPegYcnfjLLk + + BBH7ePyDTDomBJK8NN2NybS8jIx8X24OQI1aPRCK0yLFJcmj9Lwa + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:qa4hwhwtd3cpvut74biixlv6ye:uuj4ujg3mcf3lqpuvvwf5pszcvviyb4cm2jjicu7ugiypojjie4q:71:255:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:v6mjfmtvbo4eibevptf5g4neuq:pqohdp2lrbontgxcna5cg3ni6bgzljvxkho65xjkvbsrgxozjm4q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAzHCyGaqHP6kzJgCNhvnbkwEgugxEUDACv6Pmt8k6W/EZNti1 + + WnlINd1d1AvgHV1OSW5q7xxoasO0Bjy7UoegZPdYEvk/neqT3ybW+4SncCqCjo78 + + ighVTq+MBx9BVLnQQ7NT+6clI891veBldr5h43bZlhKfrf1Hfz38+51sIYd1aS9t + + xIVXnp7O2aOKEHgMMLjY/bqNBmR7idiXvB+lM9U+Lm6lqgEaAq/Owb2CV+a2b63Z + + ddnDUDksw21/SPgJzH4CP0N2UH4KZvMGqRqSbE2fNSGSeXXWowRop594EMxT+sJI + + FLUuincZzdQeM1fhSQLSBIYAVsRvAFum5fygYQIDAQABAoIBAAY/XGX15N+waUB8 + + TFbnXEssAebFmLHVocPe+546r0afgcyAB1y+L5N70hH4ke77yrhqQCjR9qvqkp4N + + LZFKVT+4ok+kH8pQ4Jd1baTuixpdpjM6keOa+RZoPXB7R0kSS5fCC2s5kqQ7Qwcc + + LCWakE299EzGgWw0/QIZsBk1WJhWqBncC4rNL+5iviWWbWh+33je4syQR31R845H + + nyeBNpsYDK06j0RljUHqJ5sbe9o/YE7lKj0Vr/T8sTw2Q43riJAF69aDFjr9C+FS + + C0vaua+r181Bel8WOI2g2lSOvOfMydUoYNwBYaZp8tYH7eJQXmp6FB29VCmvVdNc + + JjPuMAECgYEA0Y3w5z851Te3PxRWVrGBEpuHBtTawzz19K9VVEAWwuJr2YBMeGrF + + t+8OUHzN69A8l9VlqWyx9HgMYYz52ULO2UFh8A+1CRYxfBck+TY4Tl5HEpiVuNwD + + KJ8WZ9L2AjpE6i0TkYO2uGTKaPn3p2wsfh1FCiFBcSosNi6yz/DlWmECgYEA+cCS + + /3ZHOr9F0+w27YZc0rFuEYDGeOSypBiES2znii0GnU2ACD9Z2XgEG2VLwSE3U4To + + JH/p511I6y5VxHyULkRsxyEnXozevV46DJEkurBbz70S4U7jXvGAyGA0kdvPEuPN + + EbhNFePEwO+hCVx/8hkclSIBLSnIYN3vEjGZBgECgYBZzhCtqaTpQWVgvSB7Krr7 + + 9HcbcGEIRrnJUNKqtoSKpGo/3gHnoSp2txZVXAcLxkQRdbyJrTFeaYw0yivQ9hab + + eK+2J6UX7dDrMyf/PUNIIpMm3wlbHb6ky/jYKcqQDdS23vaB6AaIY3lzH50IvQ0c + + RwLtYm8fRkmINt8eykggQQKBgDZ/xFQEnmR+aqFlEVNhl43OdANTw3uMBEN0qiG/ + + YQMw8hmPWNnz4QpoexTzVMWPFwCdpv6X/xWisI/Ja6PVv4wdGFOXs3yZZt2R2z70 + + yTwH0fESBDWwPkNwlbaj77TIb3ZiyVQNkJyvODcV02E0kyLkQe11HyaY0IX6x/mD + + Yy4BAoGAX7Kv8GIypDDzgEGW27QA8RRVD7Cb5mDFxt3359RtZCXqH6MhkvOcU4d+ + + XhCWb9sqD4csSwSoR1/eT7g0uBoOPuGMHyZSoAcSGcoDm827Zjphh36DEBmwCbCY + + L0Hh+TszyB3ds+x1+1NbAmjvPxYiFn0K5tIsbkdHfdmmhuS6sd8= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:a245vdxigmfg5vqawu5hddp6mu:su5w2wqnksv23tg26ffsuosxhtp46zxxyx3speyruvj6c5uqaswa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAmtdn1hwB/oRemDFMiEzAVbcHkLSTomQDzvDP90KoQ96bmprv + + 9q+PCTkKlGcxuiZDnMBA4dNzcJG+CPPgxR0IBGLQ07ncNjtU0zTfVzOz46p7cbaT + + jZcHK088eMKAySWaj55DgirTXIMqsmolE58mIn60OOfLkhAAslOej61MagYYj4CK + + 0ID5Ij/ZX+F6d0DECTSo6iA+B/a9tt5EV+9vNS3axFdrEQb8aiWynU5GsPUGEyVg + + l42n3LUpBvA0kg/macI2BY+Q3xjy2OdKo0BC3SCcmiIj4/kXXwStwyghlo6gm8DS + + IjWeiSVZb/yaI1Jb/BtBaTSqC90OLqI0xCjqPQIDAQABAoIBAErmCTc7YwePVgZ+ + + Skvf/GU53LH1dzhk8qamO6KaHrR9uH0Hly2XbDQE4IY6iIZHvgrTwE68Lqn0BZ1l + + AoO2cEtW1TalP80H1Bc6CxKuUsS8kWvG6gbiWDht4o1zYEJsKyBvaK5NMuIcHIoi + + 5/5ezF6BNYIVNZZYoU2hPyC2rjDWMxqJaP5gwCszWlC9sAZJXYVrh9DusFz3S2A6 + + H3gYZLvowbuiOS3A71LXcTtqmBRIRDV9xvpVt4l6lfF53Oqq08+g3+0btVRV9CB+ + + QUaFBPDx+7fG+uoChfN8xz7WNY+aC7rA9YwABac3sLAxv4bnkQHWfz1m4t2Wm1EU + + Lcmn0O0CgYEA0uKcNd0kgeU7ks2WRq1TiobAxS3t+x4/iTE4BMcNk5hrUYlHRN+h + + maQjn8gTHiMpPdF9aESD8z3yPGWKlU7o6hC0GZL1PLfqFA4ZSOkmEGkDDul2eN51 + + Duzs0lc4tv+PrV+9rEQv4rDsa+lMSohsRsj6JK29bHpAHi6UL6O7XY8CgYEAu/d9 + + I68Z99L/d3ORDo+mqbIOnQfiLLlxfr1G9dwIltCqO1kOQMLqMbNjU1+EPs+TbYGn + + e1C/N/UxKLH4J/m5Z/EJqDWvP6pPXsjY7TeVnl29LPbZRcu5aX0DbanD6zN4Fl1A + + 3b7nL+czFw0Rn1hMuwrFsHtMFUbKRhyAJslYbXMCgYEAuMnvXdeYzOXkjN/vRaFN + + qf4oXt+/QCOiQwJI9w7BW8rch0cGl1hqj2nf+XvlHKxs0AmInVwkT3nBkKDdjbXm + + rGvUlPBMSldSGx67k0MRoqGSF3gF4yXzZw+++RWK0fggmyhg2NmrKDYmBO0ad9kR + + H/muD4Paj3qUQp5IJXKQlQsCgYBxC9SIPIw6nvyj465O+pg6oOrnCFG/ojwfBEkE + + HrRPt+lZziKjUla1U3UeNGj9uauqBXsr0BFg3ycUmYxsxmT6nV24e6kNeilIETVd + + 3bsvRqM6wq9DqdW2GsiQELTS5N6JXMZhVqoGBl+UsnhxxBJJv53LmSvV9AA9EHEG + + Yru6/wKBgCU6ccUsqtnitFwdtI12V9v+zhr1oHYahPf5c3jzjr4bhDWFFXZm4pag + + Vi3DpaMGaMBqfFpst7MMrWOVwLPGhEKiBVtHiblKlioxSgQf2rzGWJr1c1o0EJJf + + V+/ON/eItUzjfe0PmWDrTQr5MxZDHc8ZQloCo4FVHSXhrHIEPscL + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:sxbeisgiikrymzuqqb7njizgjq:2ljbf6mnq5mjc6kljctyknsznnyqle62unninepj7imdazch7o7q:71:255:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:ftvoiodksdpqeepc7uozm4osom:tbrsewof5gvjlf6lk6fsgssjs23rxgzdko575t7saubvyhn7rmbq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAmv4eV/sJqOOb9XQF6bLeYQDp9y3wcNXMJr6t5VzzYNZr4mr3 + + mA5y18fH30HcmLIHVDGr4nqZ0jT8pBQOPjJ64pCLGQVTddkflwHAqVfaa82XBM41 + + 2EVvmzzNnlOadGjL2QAwFo8CFrIhgN/SfnBJHZpJcJFOIcYzlrgBgSmrRerDT35i + + 2UN4odKlK0EUXQ6XKUR9eswoKUjic5nuowjgnSvoKC3qzBZqiVks+d8DFHSVpt3n + + UzAhwp/LgSC3RP21kALqr/fWZ+6iZtR6rsTX6ZeUFVoD4JaM5SdTsmgEASjT6vVk + + vA32+CVjPmCThnHX5LAKRaUGuA2Z21+qCYWVxwIDAQABAoH/NBEqIGQ02oeb3Nkd + + I2TzT6L+9gp4u28XJezofiS7ncxqcaV9h5dS/Sof+uAlOyaTT7VgCLUm93bVaElU + + f5B1t6bXE5C2eOB3vELadgkNVym5keO0MvMgiwXiDU4IlRKfaEan4Owpx3YPyztl + + exQ9e7RY93fYx3/N1NP7rWhSISo2KN8yimvmYrRe0SpVL+kFCpaA55sZdcGwcxSr + + dFISGFZ1dFf5zkEvNIF+HOFE16AkM07PICFaaL4XfdFsfNE7J/T3HwVrIlsaukMG + + u2Rky79ZUDhxaZZUMutvIuCun6apcq2sjQhPIacH/zzWrbdThARSTRFpeDVNdfAR + + uSjBAoGBALdxT2ixGDF6wXVRZ1sufAmbBIeyYkKI+WJqD44dykDGBlTcZk8YYKB8 + + VC3poAIeN62YhflJHvQr32UvLu34mRVS1AePkBZ2Za6VWqSgK0SGRjQv5oIvBgQ0 + + R18EedGLZnjsgFTSx0eHyQEmYuKJRgfFXI3q/WNVhbRrBAH52En3AoGBANhMEx+g + + X4wxLLRAcRdjbjdfyj68LlmF8sbdkvPDyPfnyp/SUjwAa2ZzJqPraoTD8olReKVO + + tnNsytDJSF050KBRdfe7PHgKBUPxIUQ3B1dLFWilPqaB2L7osWuVMDnl4j/om2WN + + 3up8Ydo09UAfPai8EntoYQzyi40fRT3oTJ6xAoGAbossxDT8FE0aKZ1tgEgJ3Sv6 + + Vd+MUPYD+mdZilWvXMs4Y4kRahaRnARwId7IWp5lBQqFqYyDx7Zsf6goSqVlcrEg + + LpI3zSF58vPz1ILkr/2ObsJy0P6PTJdIbxzeYAT2MmaqivMdvaA446WDL2pzthkb + + xjXWjjaqROe8WYh6608CgYEAgaziTjS88/TLY2m7I5WGD4bLXt89PojS660NnD2F + + 8DK0RSs4CCcMPMjOornSC7TaZL9GgHz3X64azh/O1a2CyYrtGc/USfdf/sLC+f2v + + 1gL629kt/W+dfZ9ONzyjRCLxiPUwrSroOVbG56aWXpIcSlwvDHOgs716MupLffkW + + bpECgYEAtfMQhjXgJrGfS513PistBD01BCoYuurvk0Ja6Ssy0wBNk58/FV7/3KVE + + CcB3JwtQiAfLvTknbvtc5L+a56FZ62bJrgsfvv2X/Y/fPLicvWXuEFoKAxD5O2FV + + cXl8ozjDXcUvEjwAZaLH2ui3QrHn3jX2iYl7ohKCYiyXqDbj6po= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:xa3yy5ihgbskknv4nvxaxpt37a:qrgqgnkwo6qzhzge7as3e7ywnt2ddxex6oktg42ljxnom2n5ymha + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEApd+7rVZ6XKYuR1tFUM70FiekjZ9EQRcinHLUYZsTriAQDlgg + + W+dW3OJQG9w1HHBwuiKKk2ACOCms9LtuuU0wNnclZAFX4xDk6Ap27lVTneil1mne + + arxqyVeZBVDT0A4q9fuRMDGrV1kj2F3RtBgiXiZd3DTT4BqHRFOrKfXjDOD7sDnm + + CFZyWiDTAAipvr2tj1dhJU7lNnUjktg6koW+JxP2c0MbQqJeIy/99G5crdTkga21 + + jJVpgRJyH+cubw9SjqRRKCKlEKkZlF8b5X/y6Htn95gfHRURoltK+XogdXeABIso + + JZ2L6OHVnIrUew/7nnMl94wTJPPFoQiJGT+7HQIDAQABAoIBACemtzwtJTRzFDKC + + DqyNwDrwkI07Mot1vpQT/hF0Cu0PpI7tQZT+lNzZ66jxR6/r8AKKwcIPjBBFZB8f + + lA0PNtR6QFGq4Ym5zuJqJ/p6orGnfMcnyR+OOV+2hTGIXA3K6TmigJc69Fi9ygwN + + h1TMBSEo/jxm03Qpm0a50nuGGBfKaLk/4Qu946LJoMqZMnyBWMc/6wYKVgiRhsOA + + 2pf6ji8xgCCwhv8pwjJSKIwl4exMpnTQg7h5wtY/oGzYRM0DhF/8rB1XHzeogbjL + + dbdM3Yc8v3VwxJuUdFf96cfKHhID+aDoAEB3sfRpkLqBAzXDdlDyMErVYw9THMUK + + J2le4zkCgYEA15GXSPxWeNXfYCNq7f0L6o3LSoDMzdo+yuAHwGoj+waxidoe1Qku + + hGRDm+41rkqe39dEGuD+13wGKLwDLqXE04b9VS6gMGXhFMIS3yjZHXher99pv5YY + + 5vKwOI5AYUbLKg9QsL+Kd1tba0w57ydX2q1AcVr6jPixFL2HL1CP1/kCgYEAxPwT + + omBIdOEJ8QrNxBhm1p4aCXsQ4nhxuUbNrmoaNgofATcZHEdF0ha7vQJg3LotBcHK + + 7PmqQ6HomXgTmxsLEBRYIkX5CEDQuwA0WMPyUa4OTaOLZ6vuQgFnteGe8Jtu4SjT + + nUw7eeWnswZ89q9HQtSeKcd/PpiyFcddDOAR7UUCgYBetF+6eOGkhJF2MxkvJRSv + + H0xIlv1jEpazmmjNZ9QW3IHzBhi1jysYjtQFFUoQIEhcHr6U8HQFRz+NdcwQGlO2 + + en+hhLJrkNapv/l6gP+hqtgufACBYvfdvpEcx6IRGoD3IXNZs0yp00D+iqaJIse+ + + Eo9VPZsFg9yIOBvD9ai8QQKBgD2ysremLqulHMcJ2j80YWmRZZhYmoZEsWIVwjCB + + /Sm169Ymms/Xpw/RnQXra8lW6ukltNiarnC2krMXABUR2Fo19RDvF7w1COu5eavf + + 29MnkEVTF0Pmfx7fb8txGqZEGOufLQDUssBQZUFWo+dkKQ7Op6dwW/OQQh8+LW/t + + 8s99AoGAWsgONxn9p7gU1XVOIXKpEUD5fL0IC296ibYQ3QA1bc/GALkKe9rRFgTz + + L0WbHRw95qLp9KnV3m/zeUk6C8xqZZlKI6KRSJxQczVYoUJYqWo3Iduckub3oW29 + + uFXwuZLgnBU3W92hYS5a1CFZTu04UEzTe9zLR1fwDl9KwShyG1Q= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:r7sv6u3ihzys754twjltuzzpza:tpyoxinubkl4kvg6hipls6ezun7t3yyqj6ix3vp6tvnzqirzzl4a:71:255:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:y7cqgstkbqw5xg64xzpveq2xle:2rt4ydyudlifphjplkxroltqcbayzsnfgvreu7qufhtk6or6r32a + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEoQIBAAKCAQEAumqCuPxXTpGEF+uFm+cidAyGqbwWz/TCmGRlr5bEPrerLg/j + + CfLcq0IeLayQrhhUdGf41+wn+Y88qs4Cp5jjdcNVn18k6mkEnxh7cHjkCqucSojf + + cTlMY0C/NnVBIjub+OKwkoMWEDlzY170kRgtyHuXzHfuxCwij7huovRTRgktqxF4 + + +IQGCyhxRJqgApY1oTgXG1Zt2fKFz0CcZ5RHbatjwxtOCANZyowwfGDNlLjTOZLX + + F6I6sVx+77tfMJTmNEbk4+ZSA7BrGdXX9w6M9LdQLzLWRgf+cxjB3TEC+6WU0MK0 + + CrieNwcuNvV2oQDBEyxmiiAM6jsXH81dNPkkCwIDAQABAoIBAB/IpT0xGRm2SdVi + + PMeWIxOyRwuNnD4ct0kQZR4JELC41CDoaId7txAkF80lzQ1B7LRkPdNi2nX8bBWb + + RmyY7r9XbLPdnwewnC8cF3/XvNns5Jr4t1Awust5cKCyYUaa7z8CN6TjYNGnWfsp + + Z32Np9C08e7UzAr6k3H5ujNigQhBoP64Fi3ZpsGbZCH8MWQKY6TBLwsvlBMeiHfg + + 0gliCDdMc2AQREKEV8fAptVGJg6nX5lC0SyNP4e4SFWPbWJaF8Mb6822bU6sb81M + + Gp5rrEdFnom1Z3/fCAIsFvWEZfsRluazFq38gkZyDnLGZj3JH83mVtW4eCsJVq+m + + buO8RYECgYEAu2czdC9YfrH6CNNnsbdg9P6qVTUKL8pQE/Kpj/nY5GOzQI3zB82G + + qf3Maed+gzrfDCOMeMphD9yET4u6J5s+qZF0JVusO02PQOfBoM2DPYWdxDQoGHA+ + + P8nH95p1eTeZjuEfsREt0Mhi4hnoiuXKlxNcuD/Xzl/p3llFDNiXOSsCgYEA/qbQ + + qg/3giRNBarJvaw3I2vHc0NMq/gF4pIxjsijekkMjt/Y84zQHovPtTedzcrEDYst + + w6AuJl1ZNwAfBlTJnFPtZRcunDUmeBjJwkMDhxWdSRkOSbJD0FISIJiGB/fViwnY + + roxqfi+48SPzMTDwevDe1KQD1iwTUw3NxAIikKECfyMjNoKSXgVjWX5OJSMtPwCw + + vz86sq5DQMB8v04/imtIRlPUSb0szBMTg0BYJ2BzqV6dS7laONjAgA5qJH1Inncs + + zpoylhiIclO5IJUF85WVd/9RyDLM2N8c9mF2lJAl3KTtkQOiNPTwnZnHQdLJQzMQ + + blIdplkLos4N7uR5t+ECgYBzz4/EV+CbekDhG+wF68VjwYeCnw/GgdTDVvNc2Vin + + q4MfkyQKl3aq/bCn3LRSvC1vb2WPu1BhuEBzqAV0DqlmBDFJsUJMXkuxgKx5QZrg + + G29dqBx8XatDmZ+O3W7PPuIKCp9VupxP6Qo1+MCIFZa4gsUEddcc1wyuz+9Nfh8U + + IQKBgQC3YjitqxP1dxzZwTtwJ/c8R/lLWAasI6EBjUd7pFZuh/9igtV/urvpuqog + + Zmk7gs37xciTlmcDqK9pBy1nBg5dUyJbPjd0TkNPi7+9cGZD68GfvCHfDykuHKV2 + + zuSE7JqM0hDEC+qXRcw8lg0lODM5X/SsUqmbxj7yWrdqf3u4rg== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:nn7eh7thqv5fcx66toeltgxtfe:gf643o6uocn3hvmapcu57cd5teoulsyrqlouysq72qegisvc4p7a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAxWHP0UAVKpUHireN8BgAJjXIQiynm9HdoIfvGrkdnP44Tghe + + 9MzIU50xT+ysUmTrXar5oBRDx98mv8YuJ5dpUoHl6Q87uVQhS1Qgpdvwh9MWY1gA + + NbOqNpveTvRvHGSLyxrysuUwwjerumpPWTVvhgLmxOryytbwsDb2RmS98yq9pX5d + + wsyuOf2RZ4yRn3y/QmrbAtui5iCvpzkmeqf+kuXJFYcbd9S2/pNXpLL+J6UzTovJ + + rySjXAGqu0amNNbkQxvL6Ofd+ZtOmZ2zGHQiFIus0AkbjaM60mDiFd5QwY39lXUK + + V3VTejHWrS16wbq+Av033vq7jn7Z7nOGzGg+yQIDAQABAoIBAFXeUomG5m5q/Sf0 + + 6LPdzRrSZPec86HPMCqpWHT4uZBV7GrOK3k2KaRui0ho/yKtMtPCEOz6Q+6M/w+J + + CQVCUpiJWFsGvIXIut9JjxZ403BTfbbkTtsN+WvebV1N65SfjU1jwNfg61Bi5buo + + ijKWE5lqY7ihOdTSo00V7Bf9tcE2P8NTXlM7rhZ47QvFkEwNoxHlSFJRMp+5GN4Y + + CTjIjBUvBjda78Xl8eOLmYg2Ct+SbwW714K0hNwVzz6//k1oh9GtCtD+n/ST7h52 + + 13mg77iq9jAVqj9NmRWdcd31mX6nFXQ3mK98py6sOuF3NxiFMK6Ginx2rrux7c/G + + Nmfkp70CgYEA8fV45HO0S9bC5Rk9TbFYhg52XhXue7Mj1s9FI38Ft+ZXeT7Fa63j + + 6WfOhiGyJmRR4cWdAJr/RZ9xqNyCZLcUdh3pBvpYR9dUyVpTxUVv3MIFHWpkc433 + + g1ZEAPWzdHQG8yVx6/OyOzsUg/IsPGwc2sG1h4OWf6SC3bGVic3L+8sCgYEA0NYb + + 7KpnDiwbZ1BlcV4MGIYL+Z7N85/jK7oXBJU0Icpv4OQdryu3JFSgDHp8bcvhMvyj + + IqFXH2YkiOi/xlvWnzj9QAP7FViuIb0Oz9bWiaNZLn7QB+Bs3oqgiLS2LvhbSQJq + + Bx2LGIEGjnPWJfV3lytqCI69qbuOlvdlf2CmxTsCgYBazLXLdahJdZS6CNi6mT0R + + Qcgl0rEmdrmSWUIm6fopYyWceHP5zs3iv3P/XhHO2oLn6RLcMU5uwEEVD3tXdGUX + + Vm4mkjgi7aoBzgX11/L8s0rcGRsNSk+CWBM5EPuBTjF1ea3g0BkopSkzwuPa4O+L + + IHqRGk6WJBSAQa5Ogo50NQKBgCo9pJhSP1YWhdR35ozvwPKU6ocrH+1PQdvuYAmF + + RG4xTD/o5DgyV3D5zQW5IMH0ozB0+WpfyAeJ2Yn3yhKNMPQzysXQCFFhBpe8beqM + + QgjFCZzl+Z4ePuckkyQTqWYGxjAWVOvrhd8G+hSGSaKT7ASfu2rPtH1Ieqb+k4EY + + Q6NRAoGAUl7vKlquxaJmvieV9q34/2NCFUu8aBlLAK8w3sirAVM3UU/ISeEYdJfN + + OCumo5DKFR5COKu6hkeFhqRI3ieukX9k3FMUiNemnquubGvTQUlkwEJjUv0IRfTB + + +gWW9npE1Z6LUoQ6su4iVRid9Goq7nLj3lfFCT99Y9upLbYcGEI= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:3esfsjn7csgnyqmq5afbgtinay:xsrhdomrbrtzftg6u4hgipm5tkaomumbdlxi5hpvpvawe3bjikua:71:255:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:irynodq3ps65ftyonzektbciby:asfulhlz36ydefcp6pjz2s4osrrs3eghnv7um6kqogaiqqcins3q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAtBL2bv+jmSUrBy9rEW+f3y7FS5qfLTP/jryKOd18rpIELuj9 + + U63C8bVHvJj5ppuDRy1BGA91tVLgr0bLE9GeXWxI0pNzILiTpADn1B7xjpAzLAJ5 + + UuEPDoawcq6wIM0t5uNj7jrMGm5jW5C3Bq4vlYz/Jxfxz7UjbJtTyswhzRbxvYET + + 7Q5OhIOuosSdgrlUb2UK/rR54hDmAen4eaPi4Z4N/FuUlsL9rAURL4bp5LBV0IHs + + gkXUhlgXMc+u8DgfSCCGaWTk6bH9rXDhMBbKGKVhY0uU2lX2B4r0JFql6LjAvzrC + + I7vrbquJXCKTOVRE2aCSvqb3+83slsfkt298MwIDAQABAoIBAD3G+aNX8XTDMxFK + + e8VmEadcINSQrcYwvh5mYVd7vGAZePTs+qfAB46rvfoeUxuM44tCI8BQ4XV9Atcv + + BtF8SwPK9+rCKi+SExijNOVpXj6mCuAw0xWTX3qAy7z0YDlImtRIs4pRwp7Yux55 + + NclFbc61Kf3r8YnsH0SNvz/mKzxz7NZyrWy+oN0M/VBr3IndorZ5ht34ovOr2zkV + + We5rbMVpLtR/tYHuwtjH0J0aLs0TUCmzygTO2QCcAGI/XE4rAsCPr9G/avQx5jis + + DdvW0paMIYPAr1ioYN0iUwvXQVnEeEWINepKlKul4myCdM/OdH4NYOMt4McI9Mbe + + WOBaR50CgYEA1uUGQgTiyuNXLRkhf2Bm035eoY2NAngefWadNlCJaR9FwGkJYeM+ + + DAABxnjrXLtMTboKuZN5CMSetIWTFA2HgLnLLUvAx2VPaVTaHQCA0Mdpwqxaq5uN + + Mhk6QPeDVEWqZnfqBpT6wBGvus9Y1CKaaoj74WAsbjwwwhyxcqjIyc8CgYEA1oTX + + wUXNngPQRL4QBsdOJz2GlOWuBGee4ZW+GIVw3CjyI2S7+xWHLaAG8TsNqg6GHP4V + + MLp+XtTzGJprnK8nF8n5gNZIEUr3bPMBJBHWZzNb4EzPBl334YMORuE72EcTRWEa + + 6q3ZogbepWm/piOG0oyx+yxcDtMpR7IZrp4mFF0CgYBZ7eoagrTuNwlqZBPynEMr + + yryLWxNhrycDT4gHDNkUVvP3u30jq9dxaidUCZJlcjRSasLGOoLyOmY4IZYVVDwa + + kKYIRKVeTHVZHRtR+73soScPQtWG70e9aXVJbstU3vqaeyBCtOHiswQZZ2BDFmAM + + qVrPTFILp8C32w4fb6bnXQKBgDZmwgB1n0tvVCXavV26tYsmAzdHd/YOATDcNLUr + + Qg/TInTvWuy17O4ZIymR/EkgHcrEdMNCyEFsZ6nZn2jA0n0p72hI70XTaSPsDGIF + + VAYf9DDRyb6nnfFGtxwqim6yt6Rkl9rj88kvTM9OHhgX8lz66Tf1a/MmgdV4ySKL + + YMTRAoGAG3JKI3n4MM22AykwVmCkhPDoZk7/ilGkdE7NSrweNoHvePdO21NBiTfU + + NTIg6eKHJR5EufHTLNvW54L40jiGM6cSJAXUEh1BA9ODsPCsi8YVw7FRPyZBP506 + + AqEaxdVFEL/GB35RpJPJJIvExR8PqyDFxHmDZ3WEGGPPvXb+Llo= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:umz5bassl5ndo65j6syf4dekqy:jw2rkz5kts253bmupj4vdbxw65tdtahvmtmp2nzzcgglyduus3bq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA3JDtfIt+04LLAf9VfMIMYrbtFIzKMlpLx0K7B/JpCtHWhQvp + + ozW2ttJfwHv+5dB4ykoqerNpdhxJnOxxrCdyHxf6AH7mI5gA8lFsH/0UsOSXS6Hw + + 8fMJxtn4pH6VF+qmd6qsHYyb6IDb1C9EvxndZuBl2GOE30+WjHcaMJ0oCbzgrF2V + + mUPTuc4dreqA6Mx8/SUIWRQxE6b2ozrW+eEH6VH3kRndHWtsqdrl9d7vUdqh/ye2 + + asady6qLCKCwdJ/R9/NxeoREpAm4pnQzSUGPxNHS8EQcgLk/AvrGH6EcP/rB+tZ7 + + /0P4fraqe781k2pPGrqXTD10zZZgtW664zxaDwIDAQABAoIBABePA07CN5Gv7q8P + + 7rmcoGYK09fWEeK+8kkeP4vhwIZ/U0Jyu0nLevCcF84fcGJrmftBYLgqYaFT9Cjm + + uF2C+RWJIhLbewliOvem6r2f8o3SXLafXXT6WJj8vyoSuyoKzi0J9chSNHTpDpHj + + Wpxuzs8mOLqcJp0TiykFr65xms0vRJGsZsqyA8JDPUBKRckdn6xtuaBgkYCBRQLj + + iHgSRXCgI+TTL/TkJzYEkSFvA9TRPKYOzuiTjdRyZWlZCK5r/aVHYVv8BZXoRMZ6 + + zjHqKNoBn0/JWBnxi3YNO6bTnM/I3IOSDoCW7pd2LQB65J48Hj2glnQJanDJ+M0q + + D9h0wQECgYEA/ZLlcPEphcFk1/8nQf6IZsd0ZnB8TCYSIj+ahDyzlVLUqPlRwnMm + + kY/Dk8nF3f9b3XTuD3AOYtMeDpzH1Ji0pCpuDrBJDj7bVMeqO3bvG9I4D82DYWrQ + + eBsPYLn1sKdQ3E4hVt+82kha6dJp4RjkINiQ+1wM9ehBPQbf3px7gtECgYEA3q0u + + sNTWMSRVZSa8AHk1bef2CwLYMPUWPK9h4feXcxEqWBDwmMKx1cGYqy/lYe6LAIr5 + + +44V6VfrNhE08dJisR729BMtZ3oIQfpOVPqvGM47NqZi0ckyA8aKfh4EOpzYQkH4 + + pzh9fjwJFY5rq+qNVNBlJPwwjSa1C24Wbi1sht8CgYEAxfZUoaPk4sNk0ywjneX0 + + 3yh/uym+IEToi0xUeUBagw0zcOeT6Na1GZa+/TXc/79IHNAYunyk/ooLQSUs7NB6 + + 1l85pMYDgteXq8xlHh9v9KxdkBjFpNwa/GlDzCPhp5Q4EIX+iTAK4+7w6vKWLmGc + + V/g618G5bJFxvQ8M32ITGsECgYAnbjlHXNj06L8qYzqFRvFcHegmuQE5Yhzm8BOA + + JQyvdomuAInqMwe0l0yGe7u9pLT+ip2LmvRsVoIzF8btT1jkjlwiikbO/P/7VuyK + + Bb39wX8gxUPYbC0sF/ssK/qJun5c9TunuMwYD194brjIP4d5TlGqw/GA/Sqv9HWK + + WwbNtwKBgQCHGgwM8CeTCarJGPf+Z5+VJyrjAtybE31yhlLpPd3OgCxxGcczItsA + + ipKu1boyc+nkLpOcpm7DvRK0RzrFu7XXcX03mdlxokuVuuxOSbcCUTTkWaBUyXhq + + PUgqs6k7wjKRmpvttA1MC3clLHEYdZ8uDPVyusNKdeRizqxyY8ic7g== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:hz3x6hgz6osbyo5he664ntvxiu:7hpheae4wou6b2davtrizoumqqh2k3vo25erhpgrq5w45txmjeka:71:255:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:m726xdiezljlbxgy6ud6622etm:wycmmsogqcaot6j2xh7fdfl7y3csgogszo5bc6pfaoivwnmlvsma + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAirky56Wj85ffM32v5KlYNEzn4iV1CfBQCeBhkRUBqdvIN+93 + + MdiwR8yeuJRn1A0xJsEA5j96+xIKBg/ID4PsMtskerfMU2LtQgD8LdtKUA25kx9w + + 9UZWqap/90DNf+yfjh6SolFr/riRtv0pdRLNz2e9pykBAfhnyX/ergYV2OMCeH+I + + dwoUDB9Cqu9/6lLYkPx+GTiw2G58Sk06/YHrQmtfDKDUxbUmmnM0zSqb9JJg5Pve + + wEXEGqXeLgr/BSizd8R3ChJVYEp76uh2vNooNJl7Jp0QPvyKbg4b4D3CePFoEoi1 + + /Wub3M+Z421Q+YNb7fuX5AoX5y0AJpKuv0vn7QIDAQABAoIBABX6NL8fzhtttGIN + + N8RXct6oT3VTv1jRfnCuIG7yf8a4B96avMzEGltppryx4EgnReHwolKX/IURzM48 + + ilKw8Qb2km8xtriAO/vguZMPQpTvs7aD/OqS1/B9z1Ot69CoPXfvzoXSNfSPK6Cs + + t3hxf/MrqY91zs/P2auB61axJp1rT9bIQr9zVpcfXb5dr468l/ea+pISQ3hQDskZ + + 9AURZ7a5uuUSvqInlKI6NFHBAQevt2oC3tdcYn98scU1h4Sewgw6571Me5vZiomJ + + cglaSJjf15FtFaS+7j8yM2Xpi2sUk9O+T71uNDsoB5lfuNF9VanMADCnXk0qDZ8W + + lj0HtHkCgYEAu2XdRh1G6H7Rs0rnEGwFjrMwt0o7tilo51KV4pui26AR6BAYiPP3 + + TJ7JNebvZF+dTCIqqFK2gcb8Xa5c5b+9nxI5VFTbaoez4ad9f5kWSBCD6I7RKJib + + +U0ATHVG65n6k+k1Zi2ITyf/W0f7jZIUnB+26B9W4Wzfl8WS9rEuM6kCgYEAvYHF + + AVuN00PUDREvFHhvp4SzrUm+W4A3o00k8hIPkLsyvsvrSs4BzzaHW8+35AkYPQzH + + cKXn7TKvjgy8yDdTmk4iLkKuPNBWShqWY7M7bc5OexIGuIFPkp+1WOq9mp00uwqF + + KTgRduvaJ//xDxZiNsNMYsZ64vp7TGDSOFbBPKUCgYAI7JvyB9jln4x6/lkspghJ + + uGzcfbOEREqToZIzvXeu/9t6crHIa93eDz3DzGCgJhGGm6XuaCn62jAQggo4gr4U + + Ajkqs/PTCe1eFKzcU70E54xwmcSKK2JaJ/mYqokbFTUisBtz5z0zj9MQVMg9ALTs + + jnIWcc+gYp/vSWBrURrDKQKBgHLL7Z9I6r0T1Zyk0DRCUMDVrlJG3b1oCkwuKzdI + + oY03GSJjPQFvkcEIcy62wdqtd7VjzFz842XY0mfmZ2WRvl82/ZWwZwQH4H27ZWa3 + + 6EQ4OWpsHQ4fpyhW/vACIyFKIes8EDZL9KhpbxnT/R76nDw4Skl7mm1s9svpyu69 + + /wjRAoGAesaYVXpU7npkNSmhZrlx4kUETa1lVvj4TmT4LM9Cp8gKpVPeFc6p6khb + + QBUSwuYYgtcvf5oGk09R+q/KWwe9ppMmj5rUfgBkEVZ/ayC+7GQWEdtZHg6TAppZ + + VsDT5FKUq/VvHFHciSCvQKosCyQzAn107htm3epmi5sP2i6HXZU= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:3zidms5g7qzx5flfxcadclukpu:egrqrou64kwdseq7ezt66hkyjqbbjpalocp53yuiqjnh5ot5nmfq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA2Hz1ojFKwlGap0pdBpbwIR1nUr2lpVkCrPvXJv0hD8PEGa2c + + FDXahwSgTqempSiDmxvG/HHl4LRuvFQmEhdTsg0jEolie2h/33b02GQj0CfP7vw2 + + AxQmtfVWxf8sIP5TPQ1tUaqYWKww36IObzAqA4FnKLHuy2YQf5c3f83jhLVlDOYP + + wxvSucWuCjrlBOfXT0/NWvmDbPvkiNWhMTt576+0XiXcsKeTGuhZfRuj6sFjIvAi + + 4hCDepVXy6shquZO6MKqQ0tJUeXgrcpBWrvkr23pkQoi146x4D7mxYdVRzUgyzdU + + iQrRYJ2XyIuj+T3POB4ymE3gs3ffQAOmY08t+QIDAQABAoIBAAH669NBNxFKcxfv + + 7yRlI1dzAA1kPmLiCstF9wlizz3bheYEB48YXZvJ2ZggLyVh44kUarat6Wyey3sa + + nCOJUsk1Sg2vs7bA9X4RhdSB3y4wL9YPhZ3z5GInMMhyvx0ivmR3t9K2qDPHCKAC + + PAND2HdVcTn3A+H/GIw8nmcWnSvLHNiOI6waEn2cvNvIBKaHxuRaT2bphJ0at9wm + + BkCyM/uS7d96LwZ6RJ8YSnF3uYCro6UgySA1yECalrDgHRb87v+EVOXrqO+Qij0U + + ccEBi+TW/6zzrCUinG25uxAafi2UJGSNMOf2AsTGwqlj5cuRrySlLWCCJS3ZuOM1 + + 1wLNKGECgYEA3VVnMVrcQuf6TYWfBTfT/+so9zbvNjUsS/HPdlZtrZHxMylAHsih + + 0zeHdo8iDyxUKQYy+Li/1R8Cu8psoQ/iZD7eMl4f+aJtzuGywlBlsF2GQDfRvTX5 + + dSnuoiGM9A7ph9O6muTPUdb89BlNlVvgw6noZgTd32oBKonGUNlO8rECgYEA+mVF + + lqpLkLkTtjhugc5jwXhvoGLPKhU6GSYNcr29eO3JKUBRgkNJoX9bMLbw3EHAIjt5 + + WKCL3bP6QjW6R1YZd7iBqXnIMDjdLJYu14bS8rVTw8MGWNvfsFgJVrY7eKf71dNC + + G7F2yFXKpUkmcm6x4AEfbuKwpUd0uabgCMH68ckCgYBNUX5BAYqcXMlVt237tqr6 + + Zb3jzm72MtEMnqZoonyh+6+Uvb5GgrP1QxqxUgMF5ehohF/d/zwUSUb9LxOPmCrv + + 9f5M/hCRdiqB8Novg0Jiv+kcGePNA0PnqARS4wGIaIUwC8jOP0wlPMMUypoNqRD1 + + iS9EJEMVvsQ1hfefWqp3oQKBgQCpi9lK45S3Mhq+0AdDrdSuNDahi0ZrYGQuky2X + + /BJHx/rmC78lTRqWV/4PRlBhU8QdadgIwuzx+eQC4Q55LzufbTee4e9Dd72La0Xc + + elZsMYu+ilfJ41fbuEDajhpG4LgNWTbyOYAMtsq4kIeQBJQ88YWvN6AUygWnj+8y + + /uZEwQKBgQDVQWWlaEbJofp/s1B7ncYdVQFfnr8PuVpRPDqVHc3OcalyTYaznWiq + + 4lHor+uy5Vd3RLzrI4Lm6GeibnSSejYVZkh0UddDA7e2CRJD4ni1f2oAalFPZd7k + + WW/9ijHdHpKKp4Jw52d7Z/tfrDNukBnCZ/t9z/iYXMBeFf/XYnMe9A== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:wxmzfzvgaqm3xfzgaqrlndgolm:6t3tqcphsutigxnnzyp2xx3afklcpeytnh543mpqptquvqqahwea:71:255:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:bjfs7kysomxsga74nyejdwojji:qhxtmljd5h5t5azmpoboidjf7ti5yerpokkmwtmo2dw4ppt42zuq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAwek+eTfmmunqMaNTfyfWdEnbjjeVm0QMhLYY8gC0q5Pid1v1 + + fjMuAspOREl88Dn//5VrVQRTgLG9UvAIbG1J052p3HP6AXKP+1GiLaXnHEycgvLj + + U8uZEzW2JS9xjY8DPegTAC2WdAjcgk2iys4OUWzTTMkRlM8gJ+04GAMWldTbVicr + + T1TWG+QmmhHIGSVWPBw+uTxsywDBvHns9asJKSCrnc8B56nHtnDe+QbiP0GDSK8i + + L8HidT7nULimgpwj70QYLRMS8RqbaYzfEy1kx6+tpiVKbsVYg03lw9R1RWHtA4CI + + LW2JJOXAn9YIFqUJm/9MujpCSVptrBpnIMskGQIDAQABAoIBAAlYGhlWcwTwiYdK + + UaCilLrmVeToyKC32wA909O86nfhKLbWkNd7vmIb3xZ7JxY0E/dm5cpDQDCHAB1M + + xqR48LzjOldOpGkTnPIVTo1zaEC3cAxUXtV/zbjSAVy8iEo0GR8k0t49lCQzysfM + + V3BSlSM3LV3Oy6DXiVBl5eqBouyQhMH6oKPhGR4OuycW0BPYtzNft9xzDeuHYFg/ + + XODl5cbzmRMHfvtcROw95U1lKKHig+44oZdLp3ghrP/QfAxsMniYy3Sp2cMbHIRL + + 2ovNPSEugMKN67PM2NnkeE3pWBaH5zUrSu9M5I5jaVXmeZovGuoLr3ss5Sfb2z5V + + 8NwCBQ0CgYEA+kRQECGtYw8E8b5XHKyc1rlj2KPV6bF/cOUEtcU8r763YtkzHFdd + + OI7ErgQI8I+tbNgAsBPLhEWAct9aH6HHep6PlwwA2XGJHKtVMY3FATN4U7C5BkIA + + IbvfSrIux3mBhfS12PN9x+KWvcysQmQYEUeibAOdH2priY/q4QYVLCUCgYEAxlpv + + BRaj5zntcxZ9AHjPgSGg2f0I4f1AV2r5PBzhKL5XNJLDhYRc1GT2m/LTpB6ie/3P + + 0xzF/H9SR9+G3cHMQoS+2VrX64+WmwVVLUTKurMqEZl/ZzIp6g4Lbk/pMJ67jCGG + + E9Y18GaUZTOuwQRKnOuMbNVORR5/h+S5cr+L2+UCgYAERuaXX/v2lWsgNoCGnOyR + + PtnV+fbN55ql80QBVz2SQ1AfAFc/RL7zGH2D+82rTslH8ukQGUaBHC71x5tirwEZ + + t1v82Neq36XYN5VdI28adia4R2ziDn6yFOPcAu+JuSndgDEbZA3iPJ0W4UiQWeWP + + ZgoAjo9A2jC8SRlafyAdgQKBgFywa8rD7qmhry0lqBotWkIslb7n+FuqfYOcMIV/ + + tVPVxmiB4K4m0T5LQ9ZSHcZGroUkcRZlDrvUP33onVxJMIsw/wIQ6m9gdO9SCaCS + + 0e12xcTdpuRxU5bVI1BUNVMMCfYMwFvKsP/634N/KD14JOm5RLCi6OVxwASfxG0z + + x0ZlAoGBAPEC1P9iODm4dxw7bCewFciF5XxT4TCSMHc9WE6okZuv3X8husTtZ1K6 + + OPLQqVDytIq/i98vp8YF5MMxuLgZGaOLpEPmHSc7w+00gXr2xxt33VWUQRzqcL4K + + RKEZQGP0jaVDX26z+qfM9ZCuOkiD+tr/vnhzcvZiaSBM6vnhdzFf + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:lrzl2tr6irxtqw27psdcusdg7y:6koh7cij6mugtzogurcttf6ed7ul2km56hqu72hy33j2tsn6c54q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA6cNZgrmKTqX0wV/DLvTE6vn+qllrAJWP3WehDE6oWhbLxpFi + + eyBNA4vtkIKpJAdmzP18k2iSJZZIv96WaYLkD9L3AbJrAhp4oBh8JHb34EpfuUjl + + 61L5XbEJPqgMKWx1hn96HVCM5he4ZekYKT0tNKIwkIMN3Mz6bxIJR4yfQgPtfiqU + + 364CJnZjFhHoQzzzGV2ObsiDnEzlketbz/x928canoDNwR934pRHrwBYYvx64VO9 + + g97Ox/YcKqFHpXYInps87WlUbNBDXE26/e5mrOpAxPLFXmnbGKozRWHL6w4Kit6S + + gDCCka9QSosvILbpjegPd4Nvxv9sB7qcscX+swIDAQABAoIBAF74XAnFmoCoYL8d + + Sj1t+QCj70hDCrtSh//B5caLwE7VexVhpHp0XYWG2E3BH7mA/k1i4LU8oz99BnJZ + + Go+kO0aIhYydcWcJ3R7hw7HG2Z64aJpsmOhZrfDYB3L6r/I2W6r4aGK3gn7KfUJ+ + + CDBc59w91nAnpj6h0k7Eq5tzcJJPImS8S2fePcM2zxcMvm0o6iHUJsKPzN5VJJpc + + GHTZq8/hVu1jyuzLEqCL00XHc3AQteiQoHE9gICeb2fn2jnW17ogWMCqXFq6qBL1 + + MgPXipuJ36Ngh9kX2OaeJs6KLiElxT8C/y1N0aetnLJlxwzV4Vh4kx4bnsrFBBK/ + + dRYkS50CgYEA8HGT3kascanqYZAABSglY1ByOWCD7dJHgk2cVdCWcQlZ+rDmvmaj + + LIJWXHOTCWIgIhYpbnV9EZp+mZ9gmcsobqh+viAX0P3an+GtRdBikWNpsbUvX9OK + + Me9APdVi0nDwmmfSRhzjQA0b+5gJ0SUEgbKXOl8T3g/yxa/lnkNvTc0CgYEA+OMf + + dr04EJwKJRwO5uZZ8c0Pf2SEbGzAjQifZUp3HWg25hto25iPGNbU8OJ5HkyZqJbf + + 5kPpuChRlX3VKOz6s5v4sNjf1kE8bMnnRDk8waD5MJQziEtMZ5utGs78Z93etP7m + + EWXfsbzTF8cNcQPCdfLc/ynXWRRx7eJ1YXLR/n8CgYAU+YNxr26Zl733ds1Zpc/l + + Iv5j3PSFSYOtbUHHBqQpBizQPqBSWbfASTppZDeeaO3uq0o/9YXMhFKo6gtOPzeu + + t4oe4cPSGmL48YHhBjWjAy4UL38Ld/OlOX68JiIxw2JpxcbFEP4N91bKks/Aa99B + + xSeGEwczpuaBsj9wl+dcvQKBgFJ1ZUpAvJ98IzxSRHmpneknyFerpNgLW+weDDlR + + 5479pRqtwBrpO5e+LYS1c+1e8ZXSjtHKdFfIO+dsbkAF67WwGj/1SovAx1U/u3h2 + + AjQgsg6vOzePwvucr0hvhV6gOpX60Zy4BNntNn7tOv3Tggzz7tY3NZrU1D49RiiI + + ExzfAoGBANEXl4L7qCTan3hhM8z2/RS6bVC+8Dp4E1Kyd1bxzpGmjuHrClf4aRiI + + kvD8iSd5tI3weoS7Nv4QP5FtLNKlI7zgAfWrli8uvCW7FoPlkF7JbWKfDn9gwSy+ + + 1WL/kD/fdr6kSg40dBbb2zqC/M90DVvLZKmoTOQWk+7D5EsBNyUP + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:r3q3q4f4zbsipxauq6knb5dfoq:lkae5mflammzxkoc7gllt6qqyg5gqdxeejmxtgcscblqh5tv5obq:71:255:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:37oycc3shngu67rijcu22qy7ge:rq65qf43dfsbraa6axxhtmm6xhzxeirrwyfjvqa3wmta7rbuw4ja + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAmpUbuxF3CDJJ0hTgu2qnv/tyPJ/VzSwgewi0bI4e/g2dplol + + eHW3ss7agvO6XPbI6TWqBM1OhDrlvuGdiN1KDtHg4aaJSQJaq/0f9N5t/f/kYnT4 + + ipaX3kmkTrsFsPJJkFYYWSwGeFfGTYBUr39cfJELTdoFDTXAd4D6AnYkZHvUXGke + + 8f+lk7pxR2UVx8udWyK3yO34tQmaBi9uWNACfzv9QMpaYEJVd/wadtxMb1OC2PR0 + + W6fmtBIFIREzkHsnpdrUp5jYw1yHKBUAgmdtGBQmOvRAyOeUwc9IoItzSlVvh+z6 + + q2It8DphEixauzfEzhCJoZgdasmhBoO3bdwAMQIDAQABAoIBAC8xZo3t/xEZiUAB + + 77pIDX6nHXE0uukwl5n4Rlz95qhZL9AhpV7pUXPdgwiHsFXBYgUQxR9CLr5f3NQx + + vQ6TwJBVsvoxBaisd1IarS7s2Ve6T9dfLqHg5+yNPwRqRIqI7byLDFPtBOyon3n5 + + u+D4WRwOjAzwiqpFxsS1M56cwu+KBQtQ8/cqWbQeWeMWKHi3b89WhoB8QfLV7DS+ + + jRes7EB9nnW5wtUXLEtnd6LRD/LW+RfC5QEqeeSnVVVAhGgD54R9wEgS5+TsC0Px + + UQMaz+4FJjV54yJeB9WueHbpxgOJ9Fq/khINMug8y2KZvtnEUQ5zEPBzhN7AAie4 + + oWqxN6ECgYEAyFXYTEIfUtxoMGPuySPEntVOo9GRNmJAmVC75iDH1xlXZH//gGov + + hKA0fbGuU55cZE7TZulDfIarN820ButlprVmPBebSiR0/Zdkal7ogjv0StqziUkH + + tWB/+aPprCi4jKOVaR1+Li8RRZTgMjvDaZIlmaz2GOb72xFJ2wp6498CgYEAxYjK + + xHUkykqDTxkZATds7+aub//s2XfXPjFFPgf/7jhr7cVLGaSsIcajPGvPqfMqwqMn + + 87Pon56yhbfOQor6fKKYXE0BwRX//7AOLn6mFQVpmoySstbDLxIA0qdwyYUbMuBm + + 9o/YREP6sT+cmAY4iuXiJGu4xo8AOYZV5IjPHe8CgYEApL0S9QKax4S/mKtUvMpQ + + 8VvvIv8+Lj51aJ3fJcpnCxanqtkmve6TzLgA8iuectySlVnMtZ+0Az6qpWTeWaJR + + INmijF/NLxbzrWVFCcOp5w5uQO+/G3GWiSwlkJ+dlBiYSe5q+tlp3YiO520ZP7Wt + + Z67qhIiahrfK+8YnuZvQmnkCgYAXhBNvk+qPUpOTRQ+e/3Quky3NE5CkywmK097E + + ZbtoJrtikQxBv0LmunkQZl1QhCxhA39sGczlw8TI+nrJnTX4xHqS8m/1BqN1UwY9 + + LsKi2gQabAXC2KJf5irG6TwaIYh9ZA2d6L38UoNzunjv+D2e+4MShuh2auvB7WYo + + UMknbQKBgCaeMDyOJEYdMPS9Bw7JYAd/vNS9xOjE2Icme4HZUl+JdL1EDCQj7/vE + + EldLMt1NT1/msmPH0oOYi9XtCiO2l5jGtHA+gVVNP+LuxsHsrcnFVix3mjpDLbxn + + v8ZOIynGqz8Rif96TV/668SwVoUm4kG+EBLynIsPtAGJEYeNKIHB + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:67btu4c4e5b4dictm7lug7rgp4:6ir3a7vofnm3lkackuqxn7bngupp7dhrcezxofoasrwcozx3japa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAgsuk1pcCXme4e/8m2RTs86cJmsijUmOrLHmj6Tl+G4Wq4hJ0 + + SjqO0Q0aoFIhL8iLxKaSm+haRNASv9iwp1QJvc2yL1Pa6PUFzSdwLkW4AYGSL9nx + + 9q3md7ctNyZhvf3PFM8xSnSCsI0R590M4QdWwS6CaTBB7c4Noc+g2pPhktcbPFZf + + EZX6X3GrfjwRMGuXHZq4UNoWntddAcoaaMA/lwgiDJvwriwRe946YY3gXPOc7wca + + ea+WEBQn8HehwPLIYGkPW4Edzyv6f69CbWoghgT6qzUMNuAQ5jcA9QGY5xlvNzGU + + X2omztyxcdgslXZryV5VFuFBer67M+hB2Y+VDQIDAQABAoIBADWyFs0GF7HcEO/O + + 0wsBvTlWFOpXfj0/r7FFitYfhTcVTA8dlmI24hTOtWSl8vvj8AVegQfCfvSLG3dp + + JTS8mncyb/lgCpnipWwQycwlUSJFKFe+uMgVomz5ZXWjqzLNdOtNGCZB6LlEYNp4 + + dGYZljMevekjJ53SHuSUEaxKU6vtTv+TldyJcCkde+V2STeK9R/aihABHQBVK3cn + + JrWOcJxGJJ5ZUE0kxVjf8r9QZx7eUODT9Bn1FgmIlUJtcJvUgzQEibdCce/zUE+T + + Ov+7z7UoAlynuEshFDeK8IEEDWSOqHqyvc0cg1GwRL7SGZo73CBHi7DYS0odNuUz + + tJArr30CgYEAuMrCS5otqSL4uHp04bPFSKepYB+/7QQgW/X8NL6Xa6gCRBdGN0q9 + + E/GINWagSkihBw1lbjFBdEKeq3sz+c/UTiV0j75zU57oN9kDDM56tlKhAvwaz8/K + + gcm6u0eePioWSGhX8bWUsJrxNVq9/CbJEJ6wjI7zV0KZBoMCvhmmiOMCgYEAtTJF + + FCQNuACFptHI5EhEo3qKq1tdsKyq/4VJEdEfMAgdwCceJo8HyVXNFXBGTyIdebJa + + cdVYUHVCROP+I65tc4lGcaDgmfQUho4+HawKA7S2BQSEewDGnDA8rHozq8zMEbNP + + znPhiqh2iD/gGKkpRol14hp9CaSy3DPiHrsB/U8CgYEAihK16ldhFqeSwAR/oMT5 + + +7eKzs/qT+ZtZ0j9EUv3R/FZABeD13x4mpY19/Ceg+KQrvxLdXJIPd4pQGfmBhpL + + v7gsx9q9wRVS3afAp6j/94r1040bW3sfDKr2Y0i37Cr2S1ProibS2sJqyDrtCaLR + + SSHJOLz3BZQ1UrBBNFlmHZECgYAtBwb/kE4QcaDE6dEAWa0k6ujW2GeZ5e7AfMDB + + urQDXaD3BUGK13RZ5gaG01XFiHbGrTmonBnMNLd5IyceetQcJ/rnddEasPsAzQxG + + l2ANt7Sb3pmFb5XrbllFi0CX6tazd1nXthhQOrjp9uWbez4Ul0hCHc8AvHruGb6R + + YGuIJQKBgAwXJb3Tg+jZ8Eq5fvjWc5s2fxrX4Z1BTtY68CjY7rAaZHoereCB5V4V + + Cbdw2vEKYpYJFlFsS631wrF/7ZTHdkt0Cm+MVo67lQg2uSKJpGLXw5YcHIag1JhT + + sIvtzyOnufvRg/SA/sbqapMukycDhFXEHQrAi1gIRadkMJfsRZed + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:rdrzetasw4w7tuweqpev65d5vq:gzzb2v5fzrduk6kx5xx27mvo6dgnd65ym5lm7re53in7xuudhsxa:71:255:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:ohn5yz4as4vgezj2r7ohcudtzu:onvxdfapx32vsz457rp3mqeap7q3hm2arhlje5x4ctndu2jfsv7a + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAmiJHD0uN13uoQUJJFUQATJKvFtFBXoHEe83NDAc+cUkNym9E + + c0bZmuT+HH5GPAqkhH1PKcSXRq5/W4vZiK8safWJHzREdi+gI4pHIz0BILyd5dmx + + /bAdUMXsQMZq/QSzaN3HdxK4lJ1JA6Ncct9K5w0QPC+EpL21mFqgvLmnKmEjUBV7 + + 93G5vw+EFCkg5JqKqLJu17KBpTQYJ74DOWuGQ5kgx9zX9Kk5errD8EDSoVBRnfjb + + PSLZwoCRdibxem31dDmYp7niBjP7NKPdNSa4bpF+mQE/4T8PCvTNGiAqjUZkz+AD + + OQ7di4pZPThcqold+3DLCQgg2cNJHMxzsllltQIDAQABAoIBABrFb2A5uEZAJSZI + + lBcMe5zRMXYeHGOE2JLEWSQIshDNJocNsm7vVGZx9a0PRbWyB4c3mKNhkQDm2BoX + + fU4fVvCEhC+WTXnVpdPmdZqqQuLjv+0nVaIBj+XyqqlJjVWrFlpVgwqshsDRXNgz + + 7J/LJuBgxXweqMRQaxUuUJLXEDDs7wW6SR90mI2mwEWi0G59CWekRlg882KKhhTv + + ZTIqQ8J1VN5IVOFuWW6rRiGKLN0FYuX6nXYcTPneQi8uLGJ6lK3hP+UAiA+G8hAK + + 9w/EMZXAdBa8eVqlpsSXB1cQTeZNbQxo0FZnOY3IqasLo4oLvgmHI3zmce2xgXyV + + IcjB0xUCgYEA2Qz1AeAdhXDKtrAIem9+1g+H3jguNsSnNL0cFuy9S7AKcH3BlAHF + + 64j52VbKk5lNbmysR3cYmeh7CUqiuPW2PmOCVqbG9KKxttBSffFAOHB6UKblfzjI + + THy7oge01FFGtt2GLrtoetpbdHWwGog2paMeF+uWarjz6/1USgP1b9MCgYEAtcsA + + qEpuih7rz/f+x3zskcqg1qT5oS505ny/m0Gx/H0WkFzhgh2XM9VbEK29npAivBMm + + wx7bbIjrJnzJQFpHx8mJoZ/IsLXSKOMi83pun0EhpAjmePVPnl0+0JJH9h9RLJb6 + + esCLSVLViDIr4Uz1DHkKpHNseaZ6mJsr0xkz51cCgYAA+hz0ODUJz7sp3Vr8ahoR + + DprW9jvHBVWXWC6TL9eeSpmRbg98AhIJAGHXh5t71JnToGuaGsAimThMj2hyGrEK + + UNpaV3/XxA+2ufNVG8vlNSRnzoiD7RaBuaIClbRLrF38Hr0m4rMSsn7s5Ea5p9lP + + H4/YHbhcnJ6Edmx1tNTa/wKBgDCTlhFiEjeGG6zur33Ou8gZRPEWFD4lk8ci/nAW + + FeFJ64WXzApgrc6D7FmAk3KTQTTQSUNKM4fE7lDSd1Riy1tvVv+BGrddXlLenrBA + + vt5/IOYcGrmnkybV87r325LAu4gWr8etO4rUP4qtHVyOm8xBa76VuR6ohYnRrNwz + + l9LxAoGACGlXnDUpI90vU+AJ03iIqDDtTklsTXEVtzz7cBb/3iEXtqQhUghhkagv + + IMrFHv91YW/KqmjWIpsEBSQdkkxzvf83C4xm1C4aUtKa8y3IHA6WwkMWvkn8EM3f + + s/4FM9Bo7/jtQKGqiLDj28Z5kfTa/CXORqG1kiNtqej2zXXHIMM= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:nstlxuewinqw4ugsceyyzo25iy:niiwkb23khhxzlsze3hkphtqke5w34gb3xau2yl4kyevxyjnhlqq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAoNBCT+MDYgWIm49IgY5NRDrTwPy7aG0OQ39aw8oSPplMVECX + + RfZqDzP9Dpc3ngKthBz+7RW4FrS8GH1mResg9m6U89aNh2HURZGPTzQRGMju1REw + + U0y4n2ZSfo+t2GgTeU6qwYCsKhVNwz2pJNfkDp3bcwW1MsYr8KHm4iydt2QEapu5 + + eyaalBQ6uPVn9IwWH3ObYYVdfaFDN+V1Ztkgc9t6dk9sLU5r4115k1PKPhvPBnh8 + + Kz70AJauI7d3OFItJqmHYd+qhrDgXNlQ3pyweBRvHMURi8AqWQ1ZuHr76hB3WPhc + + BsQrS/dRpIupucBu9Gs12xPtvvlGykRk7CsRFwIDAQABAoIBABHNrKG6gLvf3/VU + + 4hKRxgUZPCs/76GKfUtEtLA7VVS/1P743aZ9ttUzDL+KRzqDkmEvcpudzXEaFj7h + + 1ypDczVFHdF2/dkwn/cJu+NpYMEtMZ++FOsL8d6Xzec8EeOE9i72YholHCpWjHLi + + hzDQg+uIV2y/A4X5AZFU40JD7TwJthat2H0i3ReHycp9s5mSkInTtqKDtE3su2gR + + TB3RZ03BA3YddUjv5YlkFHfVKfWdf2XiR6kJt+tqPo4iNyDKp4G/NdNeppgRkfPZ + + BnvTZjJIT8w1PQS6Q2vafodQa4DJYQo/EAdxsBvba+RMAxPwhx0ReN5gqt9g9W89 + + zSAV8OUCgYEAvNUtjEtvS4V5iK5TLFLgE0jH3mvHbn5wPiMwvomralNwxD/oZ4kf + + Mu3No/qGxz8JfLFn75FJC5JWJ3YU4LJhNrlNyYONKry0PPxEO6lkSZB4gk9fXO47 + + 38rswz0Xz+cRhDlBAVPXF8WHkt7riqTuhvtCcNFPsXmB9hmtgnOyMl0CgYEA2gOx + + of5J+X+EFcK+YtJpDnxoFU1NxgKqZrw5o4HCExfieWoT+1SGf1J6H06u2gEwqj7Y + + 7FCFp5wq+Afzlv/Rg7A/lTOIbnB7+dMvJ4+D321Q378ouj6F/0qLabtFJuxvq1FA + + MSJ3qxWLrlb6xPN9qiuzMHtg3jiqAbNQx+fywgMCgYEAlsmwRoCSTf82rnNuDU3c + + iumqWK0+IriqjqPxL6WlkREyUjQqNEsl87g7Zv8OExr+S2kq8v3UE352d6puP4OR + + 524PdKQs3Py0/KIBJpc8cxX/dSdGomHGxA06BSnK0wTUUv6ZLyMw9lWQzjJeamcL + + 5hPL2WT7O2Ao7ElS6YHTwS0CgYA0YjzVQqd9ppETNXbPgeUyUNwleiyczlkpVEK5 + + Md1y/wMwzzc75YRnpWaojRxgT3blATLYHUTwEAsXC7oQ5yjtbnToobg/aRGw5nhn + + FgnGrpqHGIRts8Y4oC29WvzzrE3sqRo2dCSy2/tzCX05w5PHRrbIiGyvGIho3jAj + + yGzBBwKBgBrogWqCWfccQPYbPla6ba4gZtLGZgdmzZo9IvpKjv9zzWnvSyAd0JiZ + + dMazfQuBoPlntxBBlpu9waZaw5K0eT2j6OmczoOflow1YT/PseEm9K+JgzpHejfJ + + Mj3ne9iBD8PfFtuKsMJKEpofYRiQL6e0lr7ogTAycog6N7vWVk6D + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:e2bjefibvz4tgu6jgf66gw74bq:mugtu5bx7h5gcivevmh2gmwoc2kkhmobrzshkuj2dgrtm3siysfq:71:255:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:qrpf526nw3z773vbald5la25oq:db3krhancbpchrqxt4nc2vyvlwts6yoqnksnt5ayzwq5zlcmgfoa + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEAov9sWVeoF7MGLbhaZtLS+hM6QhOWvKBvrk+zs0y0tsjwWxdw + + Ojc8PflqtV+xUiJh/4lHDhS4oYhNbjoPZjQNubB11cxOxOmhCObyYvM/DuYXev6s + + xTGv8dARhZUlQU5D5JvqoO1cWKalZoYeCw1N4yovpuxXQWHvUrq3ch0M+MBs04c6 + + OM/nbyLyMCq2FHUKqVe8aVqwYxN7I5yIhOjmyzjIkMibDEmfrBZAzvOqJ0SMUjNL + + IXN11MVpln54wwrNz7UZQfFgHEMzEYb9oBzWSzJu1C9MaE3GSZasQz6TkdcrOFRP + + XozQXPSRp2IcFTPnQHg29ZB/UaZ5eWUrVfkhEQIDAQABAoIBAASOHdGLXRO4eZI6 + + hjA8cQ/zDJw/HuXLmANnj86RdLVs/SaWi5jc5U6YE07ZS0PP2SxCgl1W3+gHvp43 + + eimxh7aqQ0jDymm/W7Q7fAee46K/dGWIC30BS/j2hx7UEbP3A3e2kcKIj52cnp+0 + + XM+TQht4mNdR4Ihfu8f0lt7WCABFmPm/MTRvOKplxVd3rMA8oAnzLHOIRddYDHen + + 4b1qw/QjlUzPqtH3jmDVSMu+QLzKKX0d+wPEeGvVzZojs+D6iuztjvzR/om0pUM7 + + TXJu0FvJ3XjpzxuJrIFlQXplX3bW8WBUM+aNX1K4BlTJQkRbMHJ1PnJmsVpDBQ+c + + yc8IbWECgYEAz4//F9IaIUpe8m16Ev4ou1WaOnDrVuitTJ03/r27v6XZMEeQSGBT + + xhiaPPxd0mFHVj2SSGAhp3ChgSVc7CojC3lpI/vKmyX/k6RYsaMlwTpD6CtBVCDl + + DuzIP947JtfVu6A7ucRGxSscHFQK+DxDRKFet9wBIXEKwBvkfJkH8TkCgYEAyQkU + + 9zFTbXBktUvgwmjIiEaAcHg6mgnTKeI/KaPh1OatvP30g11sZtXa+YuSfa6FUHWR + + aESSSVn5omwOd5sDTvS8NcwzBQV5XwHA94fL2clnrOtsdt4eR4grmhSF7N8hEKXs + + Pkbb5rNMrNfV6NiG2ilzho6+KAABgYGWAmtHppkCgYEAhZxQ/jl+Ho3sPqwgV9eJ + + ysWY6SPFKoXPALF32SCzmfOdsolupFh1tOAjcTyW/JUoQaiS4MoY/9rt699sSI37 + + TyiReNtdma/FLHovqfG2nQLvsaUegZRHPutHIG3ir+diK0xDBhsF32gXyViEUzUf + + rC8gdMRHagqFfBK4a0hrJ2kCgYEAsqeogxjJvEsSpG7/GaXG+Bw3Tjv6UCQFDYar + + fRTPv8UUhwzku81NZYINbJEVqS1r+hnRE+lEW31jNG102ePfJ86kZ+bFPGQl/UFw + + vElo5m1u/iPlqykvnYAsx2wPrHaKSuI5NQsBp16V+FCDH7808DHAIcc+xAtlSzLf + + Hd06upkCgYEAilmq8p9cUry8Qk+h9BWGskzWNH/tmxDtPA+Q1jcB2axiukrol1J1 + + tHwT2fQBsDr73oDUHBMZTYxRCHFOApff4k/bTBeCNv08xzhU0RXo+F3Npjj4b20n + + aXOwLcX3b5ihtM0ebzioMdx6PAZSqQbs0lP7mDvCm/Jpl8+DLANJ9jI= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:lndkjnbiakpgufkyoq3zqiafx4:g3lynxko4n7fhsnts5knddchlym2hsb5tcbbuyhanz7fzjfxq3cq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA8JxtwE2NOlHhy50hjDK70rexn83ald2xwqtK3828FbKQk+UY + + +chzZkUHohC3hWMt9W4mQz6quedx7vtV45IXCDVk7q461Po+68Xb+Hu3fDTV0tke + + Jmncz/OvKriqT3eLGS2Lk7zLVcOX9wdh6XC6cD/qIQCs+cf5uENZKcBcu+bjLu8l + + ViHCA91Rs4mXoqkwXjvRq2xfR9DsjXCwCzhEv6Q9fswGrnAEj3K3Aog/szTEu9Ik + + 0sSC3NtmljeynQyLfVqmPTKuTxv6utSRZ8+sP+14yB77WHnnhBVDIiKaIdCFL0Rf + + jg+RZp+jwRQI9tRBVf0eWa0jhQKp4kbms15wmQIDAQABAoIBAAF3njEgWKsvQDYq + + B6AgV/BZUvz1OXwpf0KFMxfQOVpGSuhXyvopyIEBjKT4E1UmnhnkGk34jyqrh6fe + + WEr0TYIKHQr3P7upxiNLXVmMUyJs2L0vkZpUKS+Q3KmJ1n84OEzT26Yv1vEutSEb + + rwqz8b7ta/EpgtApccNjRO7eWSvgHAerVuRAmtSAuk6SVPjk3nc8IyvVhAEx4Zp/ + + wczllb1AMQyMx9WQQAoFreRobXBwN6IQucAXZEvV5BoIerp15B6fFKwqpToG3KmS + + D0K/2mq59UsjlOyaEFu9vy1CV0M8XmxkQCatCwPShH88/x6Wbkf1ktAfq67OPv+7 + + QX7PFjECgYEA9VZBp9vOQ6Uc3sVIwN4oucBQ5hRZ/lmk/dyPNQD7HrXB+YY5uXDR + + BE/JzsYmKg5XP4iEGAEl49px0OY9D+kXY2Vr9rqUjStfB3UHO+PKXw7z+/NNDBYt + + 99DQ+vkjCKT2OJfJ/HI4lptJK9QWHBdN7VMl3Fzqn/PHV7A18nu7YhECgYEA+xGW + + 78+JvGRoMAD3YtzbitoQim6TIEuKmICmtNFf+r0GJ/sY6LEjTm1Gy6kNarp6jRPN + + 0KoxLbHwJpOH+1X5FGcWoI+CWum5jbEdUOvQUb9+JPm0CtiGF9ESrRbAtM7Tg9OO + + zLQLwx10agEZ2hFzAY7U7cIDW06ZsHIXJ/WqHgkCgYAMh4o022nuVHlj+ylbCD2G + + NwcqqPFrpwJhIKmDqHgqulecubkq+lMCaFzDHaWHUlIsYXl1jGF2AIr9gzStIlda + + cSyRXjgF+agRxm1HJrwIHMhjHqrZqixQ0q5Jkv2yDFKy0zWymdbAAlA7V8qFRr9p + + Fm0BkxE8eAO/O7WVm7IXMQKBgQCUKHMbnSs4oz/gZBGYo6BitgBg0JO90RY+nFzE + + A3JSMs25NjIizrV5CH9om6AxRU4ghnlEE8rlnkWLXjA2nytXYOY3ZbiVEavP857L + + K/1I4Gn+Q+R9Kf0nfNc6kVyy1gJ3npZ8MhtmzrDuBSxORVHKr5DzpTP5485KE2ma + + yRvUkQKBgQDuY5L4hsSoel7/1gDI7Y7LFDO/3YDHUjdezsy0ZcbAk68bC74ZZYPq + + TPa6D/RU1MzZKhcQCTlx2jpW01z7oqwnTDo4DnprLTzPq2Fz+3UP543/Zh99T/yi + + 35EmfCANEuaWUWftgpA/3Ed5q4ymuzGBh7R7WfQ1ZeQ/vfuPpCSzpw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:gy7bci6yvllxzvhh45khcwp3u4:qsfjfmcl64zey4k4o5cfnh2i3mzboahf7bhtggceszrulsv537vq:71:255:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:amhnz7udmtjsa2duvirkppu7ay:cocikvbx7m6op3rjflwmx73qin2q4cvm25kqjble2nuf7ei4y2fq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAvQZiPNC4SwC7jB2W8gNAM2Guvl6mLO6xiNi0LCvdAzncfRmi + + IUXVNDbkxqETHRPQzAXz5k9hVuo5+iBqcrIfkHjokPhDfXP0Y4QN8/e4Sz0f8E0R + + 3XD3FPZWwSLhRG9HIMuHf1ciebYZRSDI2ku8ul3RDZXebfEZ2PhWlOMztCaE6nVf + + X7+IYBg+qSND924gIbQyIZlKbYZjeAomPzKfSWpZzbjcGLH0DqFjMjdxDIe/3pb4 + + tpVubg1ssWT8dzisY+K1e7ok/qwgggeqRhy1+jjMWqma5EXPQqBA8my1uFZ/YxLz + + v2PMHqe+X/rnQ+qia+ul3F0/+XQj1hfLLHO0swIDAQABAoIBAAFIP8IS+QxWKzk3 + + Wpei3DidAZwZUB0rs7MdDJnFf+pJs8CpEVK9Nvgxx61pzPCO35CrtEXMRENcUmOK + + eOcb4UY8kNHYoG5kcOzKAw/51J1nni6HCnXv+vnxG5llN/qb6GPHB9ieLr4YZ6lE + + GKbCEeK+iiTflZSiKJ1ZNqJabwvSnk2QW1+Hg0XBiM4MBlHjvj1IPJ9GFOsgt2Et + + uSMJT4wzQVAevIEfa0Dg7uB6ahDMz/RZ2PgUDseVMdwKYuiuuT3Uog3Quqa97pYR + + Pnws1X9MXVHPm85XAOKGtwWV7y4Hgp6YsVT3SbJWLbHs/4EAyw/ExbAvuvy5j1df + + TcB9F9ECgYEAwhyO/KDviIy8UP1ilcZ3+oHQP9Du5jY9/30ATRluOWrSnl5fIg81 + + +y3KVlZtnpCwFAPivY2P/a7tsaarJY1+JhwtUomTR3T/m6DBQ+rTujQeDZVEQ243 + + ucyGvTDq9UiONkrP4SgIIEookMC9+rBjUzTsNZ4FWDxvAfYayn/DBBECgYEA+Uqn + + Xc+55BCh645lLfl4HCbw2oHaZiv+WJOUUvtwAUpLTWf5xHLWzQVXukQ5gMgZcSnJ + + tgHW3qKtgpPsqCIwtGU4Cjmaghci9r3TvZ49fUgA0z5ZIQv/wAkIOp2cf3uJ9uVx + + Pi+Xs5Wt0AD+uq+k1RucGmMhlFO3lxK8kR0+oIMCgYEAp8iXr7ZMVfOQM1FSDbRn + + sJjUsNSgK01neZdK01nP9MFpHIrmIEKVnm+OHeLHDfBywlo5ey8J73Vs78no1aTg + + DYD9jAJu061F4/eoFlS8fo7eC0+imcaDVI59SLsn3KzCgBtaZHx9yatQNQ7lJ/Of + + ZySvqAjXBdX2/fMEZVTZ9IECgYAdtyxkHlLGQMVMUtj0tfv/PxUOttPVwgC7hjvz + + +EzNmpGHVJGNPTMllTFz3pYMJ84Akz6cF3QJbdLI8eEP2aN8nWQks+EbCK7+Qnpu + + 6+HggSi4BYKSUd/WgD0e35K8D3nOmGL7SqkGmxzw4m16y10WmgftjUt/ZstHktAv + + bBD/CQKBgQC2pgs1s9B4Gen0kW8l6nVLWCeQ8ualP1wzG9ZVtayiLKUY2pfGDoDU + + t1Y+irOwSnXoF/KIixgBjXCSqwVphZjl91TD8TF14Z0KV1DRjRLcms721gaNwN/A + + C7WY/9mu+FBjue6lFtCnsHbbONilHqXd/GqKpUscosOMJHWdc/r5TA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:hqicjls7azttyinzxclbtyduli:cc7zh7zdovyqe4bd6k4q45uz37qg36swsd6yfegamoszoqiewoiq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAkAdhqn9YOrOyEP1wO6nmbagEawIgoX1+XA4cglBMRg2VaxK6 + + /RLYYCIqGPkuAZyX5UTfkOJXCrzQmywCq9XvSScpX7L/JGX6sla16F+FXtPaQPkx + + 5PTVjDvkyYxR0gr/RsVqzdpe1jjuwCIU4K0mgLbnaGnatNMHofBTeV3n3eW1fb4W + + sf8fOC+vsYtVJgMqk64hPAMtUqR8IoMgTPDpy/oIZ0I9Os/abCvRUb6QQJDtJRr/ + + b4guTqQmXKsuESwfC+oZQ6VUMglT/rXnndNV8ixrQtfSExFxfk28uvz1FKAmrUZ2 + + ULTewSN4GF20x7NrsjzwL92dgHh38keK4IKWIQIDAQABAoIBACFGY00FsLeXLmt4 + + cgaGwSLSb3rdefZ1TM0twW5l6MlCeCPNpv+y6+SB4CH256cdq4YffFs3v45Ogw9m + + gpN6kJbhAlEGxKV/HgU3vT0bXG/FGCZsrBdObUvBxqC912Vkfwe1snAupDxv2NDw + + zsv9lOil2R6pXgrquleyc0aV6Gy+PYtCQo72Rhn8ik2Qblp3VWDqsJ7UwiPV416D + + 9Hz/9H7FsCW7VLgL52IWgBh3/X5HlGlbjvDI2fsz/idwzu6ZJyRYn6SLCTqQEFjK + + TYd0xhYCDKwdKBbvS5Cu1j+v4rwM7TnvUn1RE9a5k718odC8wNP2/W0BocMbb1jl + + X1p3KvECgYEAvHoNB7rUjXZjY/wioqR3o5ETVr9WMF6VJQlv1MFH6Lc+vvRmc8XR + + ViQjrE2BQIEzyQL+bOXe43GCUfg/5uMosj9l9ZDjL9/BSJUVmlzNXeXlXc+/5uPs + + Mp8JFjnCPy2eVm5mlmgujEKEcF9neNtSZI61uWa7RrGxrVuVkxNtfn0CgYEAw6DV + + 3qOyFXJsGk1uT+KMzE+M84wOLJsxQPEmljX7LzFnbQhH8CcFqVOMRoLk1YACYroL + + hj1x2x6iFe+r+kbIIkuDnZD/wezY07iTBhfqXckVfAX9n6w0mzSlOoGZWlkbL/Ia + + p9kuBwWWr9FwHefn39mX/y0bzLoHBCMRZBkOk3UCgYEAgVBoQkZwcUKp/L7QcLDR + + GRt/nkQW+YbbY5bu8JVQJh4b4d5DsOknsKeJBj4DEWPUSPVR5RtuarTFikH+bgar + + NGkFJpArH/ywW4FWWhuUF/mU/mF8tAjrVOwCywoD+V7uRTToFAgU78zvmz4J+0TX + + agD0M+mFUoK2ek/c9xUcSe0CgYEAnh2e/wY7583FxjSTVon71x7tA+RNiIwe8Sh4 + + UaxryycZOy0YR+iiUMuwc0VUg6OlSfqpWeTL45kM1MIUtIMFO4LhbDdIIIu4bNeg + + LaqiyQ7ACLAm4Cmlk1Snv3QEaNvgd44tMUD+TLqdopmbDvDjnzAWBC+Hap9pEFTv + + t4HxIAkCgYAcPS0TVpKiTqOek0oBoLxT4VZfqp2E5OlI3cVPBP7qEJTIaxAn/T7O + + /U1/zJppJIf2svpZLWp+smkUV2VxWWl4k9so46KLBYVG5n5R4x+g+YbgRKioMRGm + + cbzUaxovQsg4RLRUoKUzqE7fxPCxSm4aZkGjnDb7JvFsxhSeafnmKw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:pcta7uk5cpioxzv5nxxqsogw3q:gnu7fx56k3j72bbevirn4kdu27yfpvttzl3qk2zypwqt7tw4rijq:71:255:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:ljw6sfa5f5n2x4u5asgq2dvhoi:wmjel2jkzzwwbizyoqj44czwger4xrjus7r52ujhd5mvlnkt4cja + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEApjugYoc3XSJhbpTGOoIpqlTOTKHVBBfMsvXXlYdFIHmQw+cu + + 6HorcanqnJzGf3L0oOV2BAOxv1cee/G3c1xVyzqzEXR66esHHA7W1C+9z+H6zTc/ + + FNjEixwRa7IpToVm056kFmnsNnAW1Xy/OJsh7n8YMZ0dh7GGjb+q07FeldpYJvzm + + 18gEovb9N/TZUab1MscTf/ne6scWGJxAN2njmWG/mhyoPWOha07WMPvqIRTc4Knj + + 9YD967WM4Oycml9Mag8HOpbBZ1DH6boKKHqROe7v0SjeRdt9NCfRWJ983E+SOJMV + + OEtD08tj3rkweCbG4i5lEkL5ORI56Y+9zjXM8wIDAQABAoIBABQJcOIfcU1xFPRq + + y2AHC3WkBj/Xa+Ez6zERD/zOkscA0DHE3nMYMr9fH0/kV8rJ9PGl5u1B8r1hB2Qi + + NR4bHZ5DA42RkDU85pz7ruphnMv/bacpxxlAraQk7HaiQXdc/hF4+EdZWicPqLjv + + 8e6lSFhCioyEZyhRfin81d7xbLi8KFd6+LualDFVrOjFmpAyXneQseUfc40kGC6q + + a1IIiNTleQeyFjIhvWRV6lxjZ3jbq/79s3UtO5uVcsh9r1xThTIQZTW9NdKAJdCl + + wdPg8OwuGASuyZkbE15ZTESCbUN2ERoC5ZTflO6qI3wcxSq4LrGA+uq1N2Ez/onl + + x/bur1kCgYEA42DJos4fx6Q9hkUcuaVMdF07zgw1lQ08QVj5/VndgY9IEoHJ9DqX + + F1ZdMWzHKKdPanGWiVOlG3m1xaThxkFvhri+hFb+PDQAoAJ2uN2Pc5trRP/lxE0u + + 9e6gY/bspLxYWiCZwtzZ10Qy6m5KSRO3REC++zNVCd/E3F7GvyqEGwkCgYEAuyhy + + zyi1lJP6zkFNKtgOhPwBitd9CS2EshSqtCViKS70GjyZWqxzyq7V2SBhKHT8j14/ + + +vRHvg7dK/lZelwE5qXfMODkcrzdt1Pjpw29xLTTesPRx+dhDZXYOwsd4Edk+t/D + + igH2M8q4V4iA4Xp2CwrVbwid60B/p0WV6MpFGxsCgYBfSQg2ubqHp0RBKGVJRwQr + + H4cYafVqaQl/ORJKIYa57Jl/Z/SB7Ku0k/Sp6bPsTXDyYnd7RRpD0VVjZh1XP8TE + + 6FaujuYrxH8ejunBvteG0vK5D6PyB4ZOeZmtSqUQw/0ih9bn2jVQCLxtkZp/1UtP + + xvJBwtk4MhYFY5JWOjLyQQKBgC54x7E6qYPADsnCGzglN827iWKBSVHLFKTnTs+2 + + bJ5PQ1t0apvCMGpGaWElkhpqmf+7ZmWY3GuL4000+AvS54Ch9T58yRzYWrFXyjJD + + zjgWsmBMWT2q7UVjTLK0evGiqKdGgpY1EH4huw45Hc9fCgqJ4R9V42hztn7BX4zT + + FL+7AoGBAJfX4rjrlxziDdVLEdJZQmJYOOVVzXKLJ2MF4zsimeNa9FjEiAgiEhBD + + /rPgnX4ktS6EmhBV+Y6jibMRNWsadW3Ax8rtH0mNuTK9x07RBdPg3aagGJdNBjty + + Dt09KtA9KOPgwTHhKP438g7Me6ymoZ4e0/1vrvEh+Buejulsahmj + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:xznz7n64qdxjwcqxpo3mufyxca:l2yaiaxgcyx5wch6k2f7x7dindcddjjnx5odka6rbng3gsdkzp5a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAkCrFEf2l8ZyPTx29aApnYaAK4d8BpZ7kA3dmGshLdNhl3e9V + + duskK4G9nuBSvk/SVq5v2cky6jx/LaAr2+3cXdpCvFJzqWpvsiGP5e8jkR03ED5A + + qH82iwztFpNu8Bb2DwhMr8LFXB18ijPYBB6GPFYsWFXjddbdkMDY4yG2OtofQsUP + + TwQiaRRZOkvdzSxLKZmsao9wrbE0oJanlWk4B09KL1htIRDv8SCuTGRHqFZ/ve4M + + 5h+Lp9ykUhxvS1IMymyExm8grH9jLz+kNO0Wgj5UTCa6l9iD9maNW4+2YKeYSako + + QcwEKEFln+7cBQQ1AQNt0+vPkLgXcoiWWGRIkwIDAQABAoIBAA1w52G82nazHYtc + + nvbvGAy6jU6Ev6m6LXut60eY9VawrEKrreCsnfkucJ2PlYynyC5hDLhAhsOJng6E + + w0IPJFSzD4tw9oFM6pqwKrM0f1uSs+UK9h/03a12KDlKx/TmIc0XUtWvh5NbLmwm + + LEAqEQ2EDUCzypqxzIN9RLCxyRnQbhY1B5Vsq/8anmZPcDIRuoAa8Ed8CcJlbLAQ + + qmpOjzvbDEplAs61HaIvVBM7H8tzZ3h7HY6zipPDhP3fJ+F8o5gGOZzLGYz39pHB + + lNrvrk4g5CFj6O9h2BBN+sW3hSE+KFl7jSt1p9GGewO2hnZsjU2NAbX5Rz98TNPb + + TJSkNIUCgYEAto9/b8ZzJ4OOHYzWoVgOMkhNuE0hNcvx9n5lFrxWNvx79Q4CgrQT + + Bk6e07o7udcapjj1eWPj+PfVFALSmrO1lbmAg3kYMzVdZrzOjgYKWCPFNjp/Np/L + + i5iJYJz6lY5rGrzcNSjDwRl4W/iVualEoYFfH/cYt16gUn5I7whELqcCgYEAyils + + uOIgEBzvkB/tq4GV0OhGcSIMBPES4ydhjZhWO9PvZANfklPM/0MfWWC7as1LSQGV + + jNVxmhrJeZzlqgaG1e+WDclo5rBn6UikjYxNKOwM1G3z3ekPhzdvbaf+nH3F6PR+ + + aBTwzT3hIIWFd9+CDeeMXqoNadJZLAk6GQn4YDUCgYA0Fo9qyfmTPaLv5X5bvK8Y + + Q68BNeiS2+Tmyrt3GDeVKscHbX7j4hNHimkgyhM+fBRbdwb7IrgqEjRWqFOE1l+q + + H6p+WK/B9Kj4pkhdF3YeHd6oEVq4sDE4XEZeLYwF3gPLNjWyaTYpQ2Ym/69gsN4n + + Iq2MhkkkELi3sNaIdRhXIwKBgQCnVeinlIzjqX/mdXc+WlIPDOSZ6ou2X3G50rQe + + BzWB6iiiSWSHc5QgyoedbMNVYT7q3EPUwix5WajhYCx+M07SsLEtEkUhhm1MnROQ + + Es0fjVwFTknoqmxvCUTTqJXJJRZ3gEFNl9/Gk2zQhZT3p2s4ZSw8g1f8+t9S4wRT + + C3yq7QKBgQCNp7VRwjdpSliGZzPCcKjPAy3fN8ap1XGRtw7I4AKCpXqS0Q5ee58B + + yKWnt+B8SZYzZUyDmOr2FwGC2xUG5gM9WLQ0S6bDJvrh1qHfPCtFZWH4zeUWmuPi + + B9vtQibh5X25jiluU+wr/pyFCoHb4ULo2ddBVB4JalLsrhjxYq0utQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:dov2az3yktkdiinlcvvmhsjwfe:dddl24n4cj4ttibyu6j27ujcstssqkfzu6lp353iuezfvdu363ca:71:255:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:67grzglua2vdwco27f6euk6ybm:cn6owpmbn2q43vfd2vdsq7ptpz73aibiboslvzbd4bdpl3frym5a + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAzetleq8DMBrg1fbfhl3aQZH6aWLrtcBK9/TrvK66KhxfXfdk + + FU1I35e6O92+oaOMNIkQzVrGNTcQ43qqDzuJEBLxLZLIH3DP/dN8c2mbKlqF903s + + 7vFLyTTCzB5UV5IL1OhoWLrrqkdqtvSRO/gnAD+IjBUuCvqqDW6vWlLQPTzIkgrm + + 4GobyH8MOHX304CX/zll0zUbJkcukeb/XogSOg86CtTXy/yCbfU7FUf9QdauGGmb + + ikUAID9L6sXeb7lqOlJPj16cDv3aGKNsQaN+0QZStXHElpcYSppPrqqOuH48cCH1 + + EB4oVJOplz+SIeOXRVtJScF8jAUHwYq8I/1OZQIDAQABAoIBAAoNr8MBSmw4fmOp + + OEPiJHwbuW3DGPOjCMX5sjdgZycT2DVz6kdT96EwUjUGtX5EyDKZwoqUH6XiI16d + + KDJdhhU/0itBxagrT4GlUqfRLx8uk5MoaHnzU++Qi4uAVj5+8I7w2ISvKOmuWkUb + + xFTONRvrqNSrWrfJ1zBCstL7xL5IjqpZRUF2xvtZu1QPAxKz6MxuGhXxUI6OVTTC + + F2/hZin7Qb+mRb6S9RJlfWhmMxmne1DNxKNh/miz8h69KDeMKh7+EhvIqOgtxJQp + + XjCI0rFVtx4ghmPKJdvbOizXnSBx+IbJWQ90IPkNsplIt45eaVrSb5Y9DCJxDWoY + + xdm6aEECgYEA7XsMax7QwWox1PDqu2s8YA9175s48hhc2alBS/yYsf8adCHvKXIL + + 5WvmZL9PApMFSCG6K4er9Z7nEdoF3kZBuYRm763k7qaO2Nj7JMDMX9TPZHTb5MYD + + TPiMvNCkqaV/S9ETPe1aeZU3k/aeX8RekYYtDgQ6DWVaZYg7IHZOvZECgYEA3fpG + + tZH2+vz7JzAZ07L+5CQEVX3hWCLi6PGOxqqz0cj2xKntz3XcKNWU65LWRNy/4P5c + + Ab8gfDHXX80e67QXadZcXWmCDLX2BmbJIneclxCp//JdqsVOdILZ6Zc7h5EATWWl + + 8YEh5fcgDX6nehKUwLv4aBNdzM06m1uem3Og6ZUCgYBgT94ad5XsSzhIhyh7uCL1 + + Rm/rLAWtUaoecGFWAuyei7pbzQNkyKcAdYEr7NaLUbr7pQoO62gXJknKWKS2n8G6 + + DnN80wacrxoR4fYA0txQJUuzDx27K39dMRRK40dUshTtV665F9DwrE6tCID0j/xW + + gpc1LwuoMSm3McfhA3otsQKBgQCOrE2EaJQRUEbxMiZ3fiX8ZvXuKSGMr6eex5vY + + L2GypfOOBhaW8I8YI+c63r8fta8SowpqCPmNOc/PgJyuLKub2C63z5fKKa4/AROo + + Nq8MHabWnmX73COIGY6MaCrYAKfsFzhomHI8R/FvGwf0GztHAcowwrnYZ9SShHnW + + OqSjXQKBgGdHwIpNiKsM52SevnkVcjN5Dz6rrHb3t9VNOby2LkdYnWdOG16NKPH4 + + IoQ62YPDmcJomTQ2AjEkM93ha1e1SZuQnnMv0IMbE80LF4qHuWXJ/gc24Ruy0xOi + + mQRQ1tKPZ02L1BTeEfbwSR//OA7trVsBmrck0a7Qjqb/ogpSnORH + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:pe3cd5dbpwdrm7lmeepipeh26y:3mstlvoiza65p7zol4eenbiz6k4uvdgmmpnfxklaqdvwdz52oq6q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEArSoxW/rzJSR0lE73K7ZigVVYf+cxvOJfNpmSGPZs13+5Vm6p + + krmH0fUIzmEfCE05m2dN+6y0C9JzfsdWQyqsuSeZxCD70ND/UUNzGMrF4EVGoEH1 + + vxkyK95Rjbg4q0oeiN9uVua07ry6C9paxjTa/27sFn8DybxJTdofCHy3qaijfHiK + + t1814hXv1rU1hzpKScDqvU4Y9jG402I5bCdccofKIrs2YX+SSW7CpqQTCoGWPOIs + + bNJK6hBGXmmmPc4aleACYOzOUsdWZUi/80OOAsMMtYMkQPVbwazHHupKpabIsJ+r + + J9brBqe6QGiZnd7QdlnW9SmKB/PWhrHrXd4gaQIDAQABAoIBABR97zxmzJpDH6aj + + V52tJigO/PuZ1Ol40nKoJsFcfBHedATV8KxD115RxHqDxMPbO6t3xKM5U08o1vEU + + TtGA/dKlbI1op9QUv3oS5M50xIjfOdXiKF42cZj+ZKFEQTSH/2gMJMcU4ylzXQLl + + EqPtAlODAV5CJqUbaoNTgiOjeqqRb+yfbTZZAN2sEL45XSexlSM76Piv5hJt34Hk + + 4w/eXRHnr+L9WGvSMnxAHfLr5Yr1PDLyFqRyE+rHQ5vIoD3t7oWySO0+OgRTUdE8 + + w1gnM2fYHLpDZu0PohpHo/51e3N427IWUFQU41m1Py7EDb6vyNLb6s3PnFSp82RB + + oaRiMJkCgYEA3fAXRXqiNCX/pX7iq/vH7vaLP6skvUKgjRe4s47E46xnkiwqaWBM + + FRjTQ169Ojs/L00afUKkuox9UG1Cp/cra311KHiChNqBqba5Eos+sk3wEBpql0FK + + gwdeKBtt25mJqMjvKGMaM2MYpP9gKn85JFTo9KGVAFeyPqhLCoMg86UCgYEAx73Q + + y9aV2euWy+0Z8HsZeDKDSB+u1l4xCOIna4gkTTn2PP28xYGVx3pcvaZYWVWUZA8U + + U+1eUo+s7Qctj6lXuPX2aJI1IlpFxNNyKi620srfnDlirq94b8upZySUBYUD0VzB + + SDbbqlVKsTyijUxhQuCSFelo/pjC2p9OAnDAznUCgYEAszRINivdiWodUM5xzRkS + + yVt9+L0Cf2erKAI9e48OYCA3yQmsfUXqaSaQf9ehx8FLNbB2cSo8xPznuudeaS3l + + e3fj//e+u/OLuzP1oIma6HKSIw6RfuyTc9WhK5VqUWVaiFUm919+KnwbzC8AwY/U + + 3gdJyy4lmA83t+xAG47iLpkCgYA7ITUTctXvqi989RbNuxNiIsn8auyuJzoq4BA9 + + ZBMjDXqYuaDNczwszktwFTNoVs5UBKbG5akblc7iaFKTidUfOykT8dxq7ABlcRcF + + 58hVhJtHuzE8d1OW/NqMXya2r5bevq+1OhAzT4aKC2IvpCHS03pLpEphvEVKxQgp + + 7skVFQKBgCSmyb/MDbRe1X24pJ9yc6EHNH2XifO8B5/9vI5lTMnHzaeva9YM0MGH + + OrsTFL5TrTTMpb4nQiQafyOT75HJCCoeA8E6tnNyhcwMuBNOCIoD0CpA30HzKVi4 + + eB+5h1t3mPf0kWVhvNcdidGMcgyr8ekP8GYtE9GnNT16U3PX86Xu + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:znxyqo2qglpkhjafnuesu4foge:trau477bj5u5wjfpy4oq5e3aziajgbpyfjdv4svyf27m7atpa34a:71:255:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:5viwo3rrpmhruutemkyjhkna7y:c3pe6gxnospoucmcbujn3mgnlky3vs5dx2bbvqm4uwjreu4vd63q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAwRdN0XCfwI8rQ+l/QsT3MEwTmvLlKgs0mYInN/KH9uMT2KpI + + t1fjzryeOi6pPRgnrAFMRXGaUo5i+LkKVS3ULBH6UTlUvJmUVpQjToZFvbLAwg+b + + GJjM5lDYXeT4LimqlXHxOLCTwjoQljsM2whYgI7Yjhm5LesBgiCf55GU/lw2gup3 + + zfnpeqOtwmQfwzZoKIpEQ4ZnCzSLldlSUmR62haEBGiEfnZDVCIvdf+oC0Qqgua6 + + L9AofDFZYRemNZUGIRumAPoJMk/hPQZo5/g8USz7JiJKA0DI39nILF6RLpgAyPxF + + xX+X7bwcxn+ycSIeEi1lx2LxaJttyUXTg82nOQIDAQABAoIBAASx5dz9UY0TjhhB + + IayEcIQ2nVVrqYHLsvQ2k3CLT54DqHRgs5LtqqbYtDoy7z+Cilhm0a1wlTGDr8lf + + am5mxl1p9H2sGLDbRR2TzYX3wtNZeNFfIsTG1liVR6WEzzoEHlcy5Ywc0wLqeYPF + + nMromYpKrt5JptSEfc1lsK2nPwmuNm4YycfqYa+pXKaO2QKvmYjGVZ3Di3ZBKl2f + + pf2MRrf87aJj7admBk6PKG2dhs5FI0HLPjNmvk39EKpLFyJiKFWoDFwizIY200xB + + jFy86Ic0PGVz+jSsTWYH1+f2w1PcZ2Jjss2EF4iZrOXdGCm2xgXuf1R0FxFMs40M + + 714HU0ECgYEA+H8lLs106NG8OePE+1uxtPKGz8OxGWYZoxT223JMJzq7pxfrr3TK + + qRswldZ/LlzuZ9tcEyVATZqUUFcRD3kTn4/gQb8S7spEHTTdZm+fhAS+EyKBhVOw + + DInkl6HBAO7O2wvp/Wy1yz9kcrerQpJLWxxKMVyOLO5nX3Ae7gj1PUkCgYEAxuvg + + 7+MsoJUi2AymHp2Pbasmfq9cS6tFD2pPh3isFZFvU5hLqlT83BOZAI64jkb2z2/0 + + ryGLUtoA2zIRSKnSp+cKEZJxzQzRxKlRy+HupXvxqVRLwe439q304OOCclkNJPfv + + 888gOQKmyTfguP+KvBmMkiqAqZXz+snaHh2iynECgYB1/2oYn1c0duN6Wb3f3dq0 + + obWCUtp1xRXHat0Nt2iR+EHDRoiT+FGDm3WmsQQTb+2FQ5SlQrsWHqDuxWlEf6nh + + yuAiWCkVWtadR80aJ0cH2XiofWojdWnTimcR2a1cVAnF2hJyVHy+1otMLgsUwYMm + + 8HgKmHiqvUo493S4c2iAgQKBgEIhCm9VS3G7ApFmaxdEc/kWa76z13AEaPn98qBr + + unGVHrhgqc7fYAxdq4Cm8a3C46wEYQiTkzig5qX4GAza///3a755u8FaIKZLT7kC + + zA5RjP4o2uKGqi4kmILmv2f6OMdwcWHRGro5Km88V0XJFjsAF15EKO+3vRtDXXKj + + kYnRAoGANztb3ObR6BF8O5x4SWcwwQL2BGQ62zWv4EWESwjlKnRzxcbuuuo4zLjP + + ++3ZcCv6IXd73pFgq9GNziTJs6xS1Nfa1O1BcJmrnHVuLjfmrTP7UV8xciDFvN+y + + z876LSrjUehLzbPQbkLbhlX81cIPK0NjXLe0mea3+b1xvtTZlKc= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:prou2lgkp3l47jduvnely4pbtu:styymkrx5ja65ke2bv3w3oywyreq5mmdr4ujovm6p3pskoubodtq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEA3jkvQeQAoJhf+j5aF4Oszl1IwFfW3SKPNisjSo+8Yfixq79K + + 6mPF7c5zZBioF2fcTpNmEX1hjpkc4BZ2NwFaxvstAtjahLiHDQkGh2tGhuRi/jo+ + + x8lBS0Jtxh1FfdxvnfrJIk5fhY1/+3bFZcOQILIfROwHGpYM2K5MHOV9a87LBiTM + + 3Q71jEbs4HGgHAcShOVcy+sCUMpnSv46vvuHKRMEl//JsydjK0rZQo34NX7GwBs5 + + 4wnpCzC3CZ5mH66CE2aYy1owI8LEQKdI+eiU/ka1yb54yS7hjJ/0I3wX0X2mJ+Qc + + YMIG9YbIfQd0UKZeT0kNmWtN+3JJdkni3G7nUQIDAQABAoIBAGukJXj0OT2RMYRk + + qX0UYiM/2lqY8dIByH8DnD+kqiqGrYE00tQAakKLqydELj/QJk3FZj54jkXlcrA1 + + ESQJuvABgMcNRaPeQkSVJ5124B29CRp+GiTqHn+W+NdrHFsf6M0MSlscvXZSmTi0 + + Sl/Fv82mmjDnZ3WAU06t9t5UZ1FNXaTex8v0+AY5p3m7dvM1DWfJyTC3F9T6a3XK + + xkupwTTUnZh/y5kbedaXS6Dc6+C3/BG+7MBR3Hix3DcbQFYU/S03tP8DzaQ2aWtb + + iHbxI1Z8q2QpPd0rOMOuquW0PxlJSQFe9+ZGKThhVfBoUhi4Wm5qjVibnhd5+pnh + + VzkNozUCgYEA9r9eXVvEgOu4NhKw+k3L2Jdj4ibdfVyMUg60i4NXozEDx9FW8C4r + + jxgdVYkdnMFKoToPn9dFBxX8CmSf0n0+C2Vj9c1Bjfm0COEFFHq5y1cpLjg7ULZF + + +F3utDLtnpgRhDOlVXl6E2Y7LD6L98nwOd2apyKgekYIwJh1RwZ5pKMCgYEA5o5m + + A40Gt0bYW/0rvl86DVFKmhlxKC6mYfDoxosQkMgJzHS/aacef0M1G/wDVJw6TSMv + + ggVDq7Bd1cnkiqwlZCurJ2LDlywtkpguO/4kQvdtYgO2mzhcC30QwhoYKhG8LRf2 + + SP6BchNZ6evOMo97VidvCH96UNlexrqGj91/z3sCgYAAgSeqPTPLp6+6vJMMD/io + + uraDkdzGEthempUX6+7T8Je3YuAwoYeJRV1Z/WvIFEUYy0uY4hHMD+lyA/6nqYXk + + 9BIeQIsvxSDvG7as8gtLNSRqaccFRTojZd3FFI2T02/Fu21NHXB4da8NShtzKECL + + fb6BNPrrBRWjfyxONt8szQKBgBIXxKusqoVBewMlCATFhlG7OmaDbpzfpFD1Td8e + + 1Kr398TiuI66/aqxBH7wtPYz2GNrSnQio5/alFKNqHC1d623u5O4rW60mdLyPFaa + + 6A+VSTEy52ag8qA4LVN+Jr1ObP0A72PlDRV9rUWtKp5PIjetmooJLvkfRc/EnYC2 + + uiv3AoGAU5U7ZTY/JnisBTemkVKlw8Vrxx9weT8VGO5VDW2HbGbOZkxORT+njc7S + + YmsnNnr69IbUVMCGERomyhicNe8c+ePulCkKoKtOqni5eCqmUA7tMLUl4rrvKT4Z + + DCZns5bcsoRDJXKyz36qFgSTQ2p04ycrm8HumkzH/x/cboQqFD8= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:mlzs2hbztak5fxjkrkuuvnpdpe:3myvisewm5uklimp2xucrwep75sm2rizfi2sq5drhlqjszkpdyeq:71:255:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:keqm4ealssgmiq3acynkwtilna:ro4e4c7ueczcitmppcr6cnlj6lk5cv6tqeb55e3yztg64qwy3wba + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAqXifYzGbGnv/uvDk3WVV3V5T/jlDSMj7hYdrpZkRZNIadtl2 + + jdsE/pO+l1E5UE4Ov6VlLD7Xqg1BCnisJ+oInJI1iDuZwjvSRXAFl6wfc/F0pVXz + + kU51t1iyBXviZcx/Cc6P7JxEH2LOiRXhTUdOcTUx2lJKGf0QNVSUgTzfofmrOHiN + + ZMOU4sZRTYa54LXhv7PSltyJQlxUvuLnFCXzYY/9PZTxzpGzP9JtpFbccX2rYyG8 + + +mcT8FMQLk2IiHTK2AgfPDzJEQH4riMzxBCEjI19nT3c/spP1Hqy9UvZRanNsMKg + + SDTC0WQy7hIrmY6I5iraa2xuR/iGyjkYYejeIwIDAQABAoIBAATLnYr5J7DXe7CQ + + DZHSylRaZBkqNe+h0Agv+bLHjgBqTiSif2nMPAZTwaBtYnOGpxfF8F1Fhz9fF6PL + + ICu4nHNb2rVH4rIxlH/9B3VdVK8ZdnvVMZX7gFgbTSFULt9hUEvDmOCu5rTO4tni + + tpUWt2tOWpc3eB26M4dqjmvnw/gXlXE/kknYLbtks0cgLuFeXIax4TasHXItI7KO + + L6/NNtp5QARbC35v4c5MfLUsAKBptrx0SjIw+9B66r1Jsg2JXw5+rsTNHGKK8I0f + + CZJ0XX7TG8gy6RTXQxEi5FTE2XXJl2TRWRS7l9pbyM4vJ63Fn52Hdquh+sbUuyxc + + jMxlf3kCgYEAvdyUEqOf8MoLtXPyShODkVUwwQzMxWxzYRbXL2ZFBysvPgKoekeP + + 6Nq/a79aRb5mgKxMeh3RgDd+JQD+X+mIBS7dxWlcoheKam5pvw8uqF8sCzop62YY + + 0qtvp4CkYBNdUWczsT3nMhjS9QJUQCyUIx1tTLpi+DAKJqHinUl62YsCgYEA5IGr + + uZXnD3BAf7RIu72UgSF5SKx7ucqATRmneFd4ho4zvaw2C+GzX/OuVW56EIzFojL2 + + TXxaWJHe2y0FlNFNXRvTOBHEv6Mlm5UVAt0ULliJ2O4DCO6rYxAtDrnu0wOAectz + + lw5/XCoKDAFGSMenTxIRrHZ1wFkqVxcsROg+MMkCgYBJzG15+UP4EnEOrOzmwkMH + + wLdcsp79tjP67yfhcr0uFikcz2excBOODUkOlqh+J44sQczQQrrmPau4snQtz9Zh + + PWBSlau+DaxtxlEwRLR8GdJC4u7cYykO6jhSQXyjI6PIOncrU8aEAIYvWiJpd2p1 + + Y8DSbDiABBxN++rb/G3WFQKBgQDQaay0whJStHE/iLFl+o1+EYfLTvYyCI5ow+NJ + + EY6uOvjaID3TLHIsK9dvuCnA+oQvYgffuHG2oqT+htu2VggXyg8l7p7iouzkMF9P + + k1CazMo9fyhpdzX+TnyqF8/JykHd1ECDIAftibJMLMVsEB17MuHHyOuxGiJR+KK5 + + 3pEKcQKBgBYbOkjHTSnijJf9xkqvnk6M9bJu6LXvc2JjnixB2J2YxqlblJWw4L7n + + 4Om6dx0vvhEx5E7XvNn/3ZyuouzGk5z6iKxCNFq3YzIOhe8VS6nozs9l5X385qUn + + oV6h6h8pvwzuimK0pm4i1V0eJSagW5kwNVKiYekaplU8We0O4yPU + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:fojgru3tcvv25rlf54gmpurhqe:czcchpdw3g5tablqxfl7vezf6de33un56mrhpkswdaclo7ekmeea + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA1YgD17SLc99hZfEdDFeozhbsXLe2bbF2oCY4mx5SzH75Dn36 + + Pa5XwUYhgq7Ejv+nHhIn9w1byoY/pbaqs0WUxV9481OCX1BjCVQwS18ZfKvuZx2N + + SQs0I/lEZVoLgdH2bnabZG6qxPGXrzYgCYKL2D0rKadCCRbDfIqs8EgosJ7wE8pi + + 57CkHQZePKyECdpBivXzOhAnBVOIIBh98LbEENZfzfuG3e3Q+LvsWQQ5PUOVobE1 + + cxvzWbHN6QLBmNqu3suf23gu13ZfwtXKZMxfsKVVOoF9qYDJ2SGrNfQdoMIU8MuK + + kFl/ur79Ld9Bu9NBxA0TwjGAUtMniQcz7FkwOwIDAQABAoIBABirV6JOmgPfjV2d + + LxlzcS2qKVGG6f0fURCsicKmDLPSgYyikkwY/ct3Aj0aWtwYfiKzv0lEElRCEU1g + + XrVKdyccYhlejwPbAi4cO14h1Qx5wpfIKsADGtmDHVtGPWkYrEtTyZ0fSfxp2vfj + + nWzr16M6Yee0iqUJK7mSPeuespDA/e0/zrJjMSE4hjblphHJsPS71Mx89zEJywJb + + dZBvMr07LL/YT/I+B58nEPu0VdS3ekJXGWW2wnBRLG6n7pX/X1cTZGO9DRw/mXIc + + MDtpE8O8Wn7Fpzt1wN5DfSs+SX54YQmVHMpnS/jM5DXWQP8pgVUH8nHlqVDlZQjH + + OWL/+x0CgYEA9cwUxl6MI/PFq6TtWnHl92/dIWipAoW17z9iIlXVS2RGDgOGXLan + + xpf/R+877+BxEcfmE11IGpu3BpBSD7gX8glqH/VfhXQjzrVYj/33s08KSPrf9J6a + + /JJvgwLjrIO4L1X4geYTjDNHHpNLiX4Gg+OkXrtcQHN+CIXOM0n22y0CgYEA3mUQ + + /M5S2tyzDHK6cmyzf9WFZwyHhwYMdju7jOwErf8VGJCn2rrCDAdIlNWG+ru8fOz4 + + F/++Xxq8fYr0caOzDghK2O+IF0fPaDxYwFuHBT4vRHjVjau8sYidhIeK4V/JLrBF + + uZ1NxA4kX3d7f+6Y8YWMpie16ple08b6yN9VOgcCgYEA5HoyqX5DeDvl97pUI2mS + + YWHrRF3cFIsj5eOeHdp5bR4lfGtMXywuYozxb/VyWnTfxa5yMHfaSVmLVR+cGB6A + + q6ySqGhWxV+C1Wd+jkJ+GIAVSGdi/CjeWn7oBvkNl1PNRrr8SAsNCpqztjkm0wSB + + m+Fj7ebtRr/UXKm8VbKgM3UCgYEAgwUj1uxu38X6LjFBKrxjm8Jdj3JQPfoQSW+z + + dLhvoVqQQSKn4TL5s0BvQE/z76++whKRrwHaVAlaVtQQYwrAKFo2Tkv/70c9J/m1 + + h83kY/BYxIwzs/0jc6w6sKNx7IkT60+qJEpKUGDMiPnJZntY26GEVTc783Rb64Rk + + pwb8HO0CgYAFAmDbWNKQynEFHE0brggHalBZiAoBa1hmOqwYto4/phUIFdqjt9Pm + + dmiA72AuK0YnKfMP481tM1IcCwzUIYaxbFMDUN2yOuzGVvQppa5TrePm2KM52fp6 + + 6vZZcaQ0TXRp9Mo9BroG0CkaTQ/XTm+zfPpoDWPE9cq7L39g8meABA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 71 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:ljiodj4tijkfzej5nqdk5h7cnu:3fb7y2osytliwli3oez3y7ece6rjwfrpa2zn7uwrfmn22cisk4aa:101:256:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:pijpudpxiovhh4mwyatsoo6rhe:j4zu6olizd7znzfvxqxtjkdr4vwvmvjncqafvjqkfi6ppk47gopq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAn64dg0fS5XbYmqhhNZVejtWlUnL5oqHiVo7tMYh17LRrq+lL + + rJ9ra9j+FATvN6rYY4FdkN614veLud1eys/hvt4bgJ0gWxOFCkCfvlak7U8CPw3T + + Jmg0xA6bwJPI6QUBysodMZQTNn7ZkFOglSAxQKsssPw9FrOiH7LwYDG+KsbrFdcO + + DN5q3zKELzVts4tlZSwuzKZe/DNiwgaLYousjbqInS6vxYJWfuXL4wP0igjWt9ON + + 17pfF2+/K/ys4VxjUoopbxRyp27R9HZq2dbmpv3DolTXDH8sQtUK0u3EvD3qemBt + + BkYDyGBQ6uIU/Rc6RNXUwT8r64amQc1+NpG4mwIDAQABAoIBAEkpsgQQyKSyy5Qx + + SjkO84Bmi5U3cQH/QoF+g1eKut113U+rWS0C7mk/x0rM5/6NnRAamhBiutv/qFnF + + AEXU8g5OHjPTyptwWijUa1z+vhqtdM4HO5QBcwvR1bNrA0chMC0GZlHtEtCJVo42 + + gwFQ+sAyrgt5x1O7grEbf9/TatqWCF7pOF6fJMkYfODAWbvdoOoG3icQxDj82Ya2 + + UakJFH5ZDKKc4B0fV9CSiT7HCFI6ZGBjJfFkRphU+h0+qdgQB/qWSwBZ2VhK1rKQ + + zMKjluwn0I+nrQUzmshKe5StHLwTezkWkaZ1iMvQaHl4fnw32d5c7SIh/hmy0s7j + + cqHoukECgYEA1TVlxFZKCPTJxJmHACU/tMq7HZqESDojplOlSv4apkWC6qJkJYUn + + 5/VwYmiVbw2Owk4borWN1qaCI0EqbVCkVi1g/pk1jAkRdG0yz7IBVGlronAvttWk + + n8aw7sBXkQcaNybz1k2KVfREFHb9kQfZ3e6RpiKQ5YiMnrFVUku32ZMCgYEAv7pw + + nK76qG9/GiXRZRjJjUbtzxczwnG1jN0BqW40jK5Wjku8Om/TwceJlamgNwrCYwb/ + + pe/a9lhYOT4f57sOmcHn86L76CKKY1BL93khF8AFFGmO1bHrs7PaJQOtr5aVKYRP + + ehFNOwgJYCQWPF9yKoen1Lx+MJkwsKAAHwyvadkCgYBDDYcS51xjUrD9/pbBifVu + + I3ATkFvX50j870OFwUKaVjQlHKtITYdOYRdWK7QLeAUUwMHaOyT/g+BbvAve00TL + + wXvGtmJrxxJRPmKDhWT7qifqr0OiSbB7e157x8wCVWx+Oebn1/0QqUCb+wwmB4US + + UgxGZoqRVY97/SNrPVr1twKBgQCDjEJT3uLwyn9ky2neeaFgo7frDTpgQXCVk9Xe + + EFVR6RROUbx2Q+AA5w2JeHcLDQDOvTCPBAEyYO83Z16wunGMIbUqPzujzH8zIRbe + + V2fTSdayaLKuAIN+KvqTxvBWt3TkpXl6gYCB7kOwiVIQXlSQxb7rgeD7K0BzD3TF + + 2QhKEQKBgQCNQVMGBWjXXo+pvyumYHBg8GxO9ZsfI5bzDyNgJqG65MCQDB47hrZg + + Ng0UwIF99v0tjfDWmzx/ZPIOJFhHYv8rSKyh8j/u9U1GbquH7bpsq7ICNl4DZ54u + + AoI31FyAYBP3wOIBPLe/SxA9MZhoIQVBh7d//CKn5+rnCZyRDqMCBw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:uqzfer3za2hbweacbjh5w4hvjm:ujlv7l7tyq25e5l2ctgjunsutsjx7nxv563675sshijvc7rpd5la + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAyW1VZvVCO0ryuRbM14typdFJ5+iZtIiILWrHcR8W+AKXxOdk + + vP1XFbyTzJiigYY2V4z6yIYqq27XNcLpPZq2RuxJ3bl0VSaeRC5DzTkaKtfwlL+W + + R3qE4Et2YpgGusuG8w9MNOsBZQ+BbhvrOzU3aro5aCBt74C7cdok1GXut/+JPNMi + + AkAP6ZWfVaUYwFzTEwmhwLFotyvIXrx8p9Y62XrtWNTKIvr2WUIbW67lyPkPcvU3 + + OMs0iPRP8TnJpo5GU5pg75uuMpsugl83w9ixt1Kwziulo6uflBkXbeB40nbrudmH + + ZBExZmvcyHs+MM0hPI1s5NHwG6/1qb6fg72oXwIDAQABAoIBABjLnDU54MbSwZFW + + RK4N7PWLj2j8YZtvKTBKEjYTKS0riIpFH8oB96vl1F3dtjdykZLyeFah6XPEB7sG + + /NZICsMtSCSCtVbcE6R5+3+yVU3L2kI9WV8ALoY7091sMHvjHQAjtHJZMYlCwOCQ + + kELwGJvLQ9DVGSNf+fMYcuswhxPgKVv09VCjOw5T0Bmi/acM1diimO+YFx1HA8uQ + + gm1Ent/v2z11zDPZiAA+Z9tCxALdLOmGqyz/GWvfO4p4S26YD7JbF1bfpBk+2EXZ + + tHrVM/iK8BJdp6fOgjgOGCxungdU+YUfv5c65oZwQCM+qzyFzaIsICyXWptvX6HR + + reF25nUCgYEAzw+xZ0D3AjFSAC/WqkpwaWwpZRGgAcGRQpIp3VYNooNZhVJ+jWhq + + UEIEKuF7DEQq/u/y48QVQz07mOuWpFNa8/t2D3kt2RHWU80kLVxvBnkbsvnInjcB + + cNQSVGT7zFGqdQJI/GxYpQN4m7PYcgZSkhQo0CuwP37TEX7Nf/DQYIsCgYEA+Qi9 + + mwkcIWRWI8Y1xjcDwUwbitmm3tD7AJWmgLyTtW7f03XLk/TBLBJPf/9AhKGAN2zL + + P431+xoab+tiUeWAlJqYkCqrPD7eagEut9HOI7Ttl1c2NN3E6o4yYu7IxD2O1BoZ + + wx5a7hxywIR7f2pWsmGhOcZtMMUp1wI0IrHrnf0CgYAf2oguHD5jpfa5dKKPe/gj + + H7KWi8mTu5V/KkEqfayHTbGd4vz5ABEq250Mg7eMQYhjw8IX6/hhabAbbFK2YORj + + GFInOzskY6wXJD3mhIvH8SWjuO11+XxNQTK4rPhXjFCuw3U67+gLKqeJPHeVwwc8 + + 1cEZlT795aLO1DUE86T61QKBgH+jgTrTIn3i5VuUnb8oN159WaiDAco2JlAYY6yb + + +sEFQOcq+tqsmc2y3NhnxXO1Kvg9ZLcAVdELgf1XEZ+UF6ES05sgo39PYcPHM2C3 + + wgX/F793zaqu99yYYS7f4Drkqi3/6rBdAJIGNrKBtKKLqD/pVi88in5yr40p7frS + + YkcpAoGBAJ/hMr8iXNI7cOPDx38heBeB4AKSPFBDJhmxNfhk6NbZvnZgyUmbZqUJ + + T3ewhYYrOhAJpGd0sn6O0ReL/R3atMIPKxdMp9lbxItASmdxLtJSFUx2Q285ml/T + + sgmrKsiGM+UAVULBB5kVr57LSmCDzGkNqup+k6RDt2u7zWPbz0K5 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:mftnvh5l3brshwoupvu6kz35cy:sncfokby2tjykbr3zgi3i6lhgerg4kz7fsrslrlxdy7upwkzq6lq:101:256:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:24fiitrvlsely7grnfn3ghrsgq:2kgylma3t7u24nj5tn3p4p7vfyokvyryp7mrymngl64yib5zmfxq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEA4ofaPstvgkxaUAL20n5dlDVSnjxTiNPDctdvy7WoZ6fGx4wF + + m9F48+0Pa6bnelrJgQg977Yv+Ne65eiryX1QS8IomGJq+8xSWYT2wfiOKd6RthPU + + dp+XhuVOdJNGjfoYrcKDRiCDhAfnSF2rT0ECVDDbW6B1rMoQihbC6nxPMKAgroMn + + 0cJfq+Z3/9txo88BCGXYqNTPJ0tB4U5kQikoylT3KehNcqcu3wBHf3i1JwAAQugi + + JmZPYb6KWV8w22MBuvijSW1l3GZeHrwbhBo2QfNMeEfHHuzuy7jmfXHvsMM3vqUV + + kB5o4Cvxs/zVAX5MkteyRZITudQ3UTV0D0SWkQIDAQABAoIBAAm6xFzFF8LUwl5E + + ZP3bz+t2h4K6BuvODfYn8FUjYMUkTM0zo5FdOQuKXOAGo6jlhFkb6wPEOKGWASDb + + J6G4Vai4q/iw5XUaLKv2ojM+QzuOI9uvqgT29tGkQK87ciDVTeu3T98aX2ZeK94M + + /ozMDIG5is+6f8NjobvknWDn5O4q0HsT2eeDbDf/FIp/dIRDjtp6BJaDy3Opql7L + + 56RWuBj9b3on5dC4zuzKJSM6p0wVsXyiQxI2U6qxDdH6fdzolpeyrpzjpM2lK9I7 + + rhSTgm9E1D3nqgC1mCC+5MVuZNXuTc19Ma5pEP+Ntc7LonOKbFfe8ysC48G8Gn14 + + oJS5Y1cCgYEA9wmAZuzANhyraO2rltuBvWSVny8YiYrVNAatPzNiGTtQEUCdTN3m + + MJ4yprzslUtofLqADBmCTN7eUpYBVuTFSSKK7DJAaDHzIy4h7o12rS7ZD6tkj6D9 + + H3HbmUJLylU/qzx7eHX25WJwEkU9cK/ufoTc799noJYlBhSltNLGIO8CgYEA6r/i + + ugpXuN5fZ2Nu3T+WPQNGEgwQdhrWD4J6HnjlEFfPuj+gxIe42vEU/1slDI4ujgHn + + bFx2lN+LsmbkDsweOpAJV6KqLUALcqdIrInX2BEfhs9KgqfifGROZHf+FwTb9UxG + + 4g+FeE8W7FDz4ENa6i0GvuLRery+zLAoymApwH8CgYEAgf4X+REf29meQSq/njSH + + wteI/CjWKppJsoTI6XbqagiSC2IK5AXoOTElyiOkArOZmfixpKxPqo+kQaT5s3XS + + cregjsWqqqmOHbcK1/LMvjjms54m3oWCbOeG/NCr/R560GqVNkAs2WvBOXwB5qhN + + QXo8oGTYrOIVPWvj/pDi/TUCgYEAjO9a/XqMI+9Ns9KckrRETKkUfm1DzMRb07/v + + 9S97xo4Rpq3gpV0efEPU6WIdIiaSiKtX91Sj1MlJI3hmXwPo+hvToAuGw9f5h4Ir + + PXscXRoapWL6RuroLOpDrknkAInoTKLYw4uyBALnrkUDxZZqlMEnlZ6zSU7b9iOk + + uat2JZ0CgYEA8sEwTSjLOBpLUxnFSm2oVA2lsn3cNr40aHFfqA7Uc4C/Q/znSfV7 + + MfmYuykvFAemOzdHqsveZakeOwJxe9gQQ2Ar73kiHtUt/vVQxCoAFnumW9SBvjIs + + 3/8J8VeUUgbLada2ki0hVIWWYmIG5NmF3+QB1c+/Jaerh1qeM0wUnl0= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:gdvwak2g3obbqzs25y62axubiq:c4j6xu4nazb4axrd3xpouuhhjso4oedqyulo7w643rimve53rkba + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAsc4qFPbdyhiuLD7dSe70KFACIY7EvzKOzcWH3X4Dx0LZ45TH + + 92euaqW27FGBM2T+z2SiYaTAyPEDeqoOiulRZxZTk2HFv+VVUmjNROlbh4gQ8GwG + + /WwCq7eYTWW/N59N/5cSlyO81KqF2BTtVEjdt4Hqx+5D8nkwLoDDd4hHy2EJAL64 + + +TqdS9030116IVSHYuMdW5bn83UQak3+ihLX3AB1xASfv5h1Nwqk9xiJ8PevugC4 + + /gbcwJEqAzxMEXE2jBXrzLaHs4qeCl8wgzg7R/pHlQMOYBzUCDna2ovT7gHHC2Bs + + zmBj7uhHm02uu7dYK0S3WtzYDtbbA7qZrGMLvwIDAQABAoIBACTdxtru7sCrCl4R + + MMfWHFjJcg+sLv4nyPVAajHSIY1svonR/P4+yKrDLmDka2IRJEYzKvoM844Wbu69 + + mONTijXSKsUJxjtKHT1HjpwluH0rCLwY4gAkp48cM5+Eo7ewN7dxhwDAf7QmoTbS + + 6/yIWTRl4xzOOddqKkPSHfVIU/6GiR0taBb44yz7VCp7iMSqa1VHSHcXBxU+lspp + + f53a8mZ8+nupsLGTsne70JGe0ipq9YqE370Rz4J0Onj1EtzOgQJN6fQdZoD1M/Jq + + ldCIs7D94XZ2J8Xp1WXkiSE4dRwNyfJiANFvYbXt9UOCx1XXGm2tVYTUhFbLDzlW + + R9YFYNECgYEA0L0QDQHCJexuuH4AS4BmGcLj1tSrHA7BViSrnhPrQTjaWeqWdiZh + + Kv01tWEeIdODCmSIJPVMS6aywoII2bgQAFvzOX3tAl//Kc8wdFSiz7WASyatVW3r + + uv7dtTGSsBWN7fXYqvjr0eB/mvyqVBlYzk8qgSpaWEhkkudn/IG18jECgYEA2hAl + + hl2LDt0D8En7LxiKIIB+0s7cFMJfkjNRHyXcEzbmTNHhwTQ6puYE5TwbSRw4JMiB + + oDIvIAMgA51Hwk5aC/aGoo6z60wvHTzb0XpMlSWvytuhN5fRH6xXY8TYM9I39ROI + + xU0qvGbKgQQulwgEzRVGc9RAk6BJ+9dN5DH48O8CgYEAvqTuk/KXL6vRNA9glZSf + + q8ej8AIshWO0kMjNNYNbyiXyx0zKPv6uoGTDOPWKX7qeZE+NSLQBCtclTSEWlELX + + 2nwgmNG6NgEXO0hQKO9kA/DxS7H3fZ73PcKpG2Q7ZTdKeZugWAcg2n8ADL3XkxfT + + VBpZ576W5Sq5MLLI9oZBdwECgYBMQk9NMRN7bDF/a+/q5XMQsL8pa+wtWlhf4ZBi + + CzRuh8l8Xf3MOj60tUZLAH0uUS8VNgWXB1XRpSYh/XPl8M6u1lT5LlyfUfI8EFdz + + Z4i2tApJMAuuTGp24CdjnahaXw7wpxcyoKzsXCo/ej3s1YIQUntj8Htw5SJab04v + + GobLgwKBgGzt/D8Kilx8RmDCBSYnUhYGqpw2m09knujK1O61S5yLODcUVgzp1CL+ + + eTJQGAZxtGH//P1FHSl1VE3nGCuwCv44a3xZ94+BooL0NHFyLbLSMbekz4Imnsva + + dgkZ0y5hxm3MzWWZex+5YaGOLTzHCZbv+ec2SLnpYT9h9BMlZE84 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:sshu77h6opnto3jnngot3lwzl4:4cjhp6u3i2uzdzrjitje3inlhs6gnlgwc6wgi6vtedc2grgvcpza:101:256:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:vfgmoktxuv5e5ajwayx7qn4h2m:n2se3m5k26k474losb3nhwevksf7iewruqwcwvk52dyfe6ihieqa + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAxsCouaG6eszb6f1uywMum/M3wvq8N1j5JlamB6q5AJp8WzG2 + + ABOiemaykaAf2p47/yA0V3JTYS4+lUye8jZhMaN2iNKk7Z4aSaHNc+uZEJQxVeVW + + CblpobGIgtSdVHf+bsZBWh/rS3Eo7msxtmlx8EZ9H3ww3gJMwuneIfy5n28R1+mF + + Mxq0iFO46PaCP85kbvFwjH9AUioImx8uP8L6eUNdx/L2IqAd/cQhT/3eVXF/n+fI + + 0rydpLT3F5cKSdKqta03A3mFD/BLjbwbx4dCFYaH9W5IRWx8ytx5sRcalBe8g06N + + kXA2WQeAqCpMVTs9KmIvYIU4QeblU2d9SXchNwIDAQABAoIBAEYeWChNb229cmRl + + vb2vnLT2JJkMPnTEVfn5nc+conIdDnxZ2FzEkJDgRGVt+W72XjJO2Uh0lAf3+apQ + + gs7u8nFBuyLgNcGDAsExbTtVRgX8Uj98jlMV77dU29VUT0EqqD/Kf+nc0vUlsgwT + + E1HId6MOKzx9YvwgEZa+TVjuQUqGlIhu/inRXtJryNKXoK3p9X2vCxr9bGcj2urt + + 3PWIj1EhcDagoBFporOFcvknjEI6FdYFxHUMHABDricPmsPlyWgR0P0T0BfALDSq + + 9n21DNn5/dJ7SUt2oCsHGOjVLw6aNZ3hVrpiFnkWYo4HsUBrDr3ChUj38SC/1tHc + + iM6oRrkCgYEA7RmTZvzXxZCMNBwFQWsTrlfl8HEdyKZNhT9VR3F1zES34Db1FeVI + + Z4VyQC+oBIVef4A8HNEmdA00SRDrxEGVuxBMwQZu15d0HlZT1NMutYZQq7E7h3z5 + + 2YIgVRQ9lG07/jDaEwjfcNLo/yCYFzfhx2O7xCKKzdtlYIwU5AlWxSMCgYEA1piK + + jJ1kmM5zhb+jxF+lHbUd2W/d4ZqQUyQ98Hetk5uV2aoBbCLiJaTiO6r/ZQafgX1s + + VWx7dLC3sV9qUKI++ymkhV5vUmgg5eQkg31hXg5SIUNVWypN/jOg33e5P/TdUDJ3 + + yycy4YuwptaXL9T9Qp0Js+RyK9toC9zSJ2ShZt0CgYBKUDLYG7WRca3QA1xOVb5U + + ba5fP0UDh8RSWDhlbRVr0boEJ5WHqFaaQ8Q8g/NYf2jP86Rjr9Yql5zkrc4HtDq2 + + 5/P2qAqDvi+h9pLN6OcB9DhCqAktfSleWB/EKtTmOZqNIEipoKVP2ns2w8OHu3cj + + pInMfrscrIBI038UviyZGwKBgBLdK+i6eTpZg5wxQXMkuT4ISsxvYgDP9nnoiK1X + + x+Fe3uhYYnGgC2MlwGFgYbz+vQzD+r7zn1KdqjgkXBMkgAbSHU1ABOcokiPDT1Zj + + sihzd9LGuX0fFeYPocejHZy6qK3BEfjAxF9BSVERMg8ZWP3/EfhHT6X9ToMkcTDX + + TrzdAoGBAOahVk7AQlyZ2doxTPLA8+gcJevkLoEGmAHSKIZwvyWoAitfAlBNBEnV + + zfGePpIJF39DbRrqyTbYTVBrKp3/Z9KWM+QORxqWlwFd//lw3bTLMGL7o0hX/nAN + + X5HWJ0r2CwMbRMFl0Jgwml4ONor4WcbM4GGdHKX0m1h1c82EuGFc + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:wosfoa5glh4le3cvced4iz75au:gmw5hlx2n5vmryjujpt6bfxntgfgbdcqwykgxaq7sqocsgbjtkiq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA3Z+dHpI1JFhLpqYkOBcmoiEbOS7m+DJBxmWsBpy3owBVcKHW + + k0kxM9+bq6oyiUBP4MI7OPcH5A+1dKaUaTBUKRGaFvJfPlsO1PHV5wyD4KdfOIeM + + ZrcZ01glAIlezAdINKLXUgnOE9cY969/q7hcMLUVRuCQoF23kSI3pEQDQxC5+lIQ + + /GjyNAL3mCgeYGsVeG4Ey+cNgrX3SaBjKMW6UJRNHnt5oszDPNi86ErsthDwmg6m + + lgj0qqXdOYYIc8JHq2e+3ERsota5ucBHnfS1UHpcFxgMkteymrzGmKd9Cv9alAtS + + dRyHlngdt4VK3Jw4EIlaLRPnVqT5xY4huxQPSwIDAQABAoIBAB07kwl3xpuzK9Nh + + AdEGOLnU/RbHWX7ufh+RxKWgoVZWUm7HYhrOYjeR7KIxknXpLkAazp3+c6OA8PHg + + kR3o2okKQdV6BdcfQq8S8SCHVZPZ7+TweDQKPdVTQJo4BHGMGlmbCyTOl0ilrCzr + + kL8RU9O25wYQ0/LbOb3ikg1QTU/Yk5SXqbquyK3c1Amz79NxuzeMTDEjCpRlTbmn + + Sq2PW2k7jNoULTuCsw0nEl6wtHADPx39xMYWgfXoK4caiTY+JbG3Ru3TJYHHytHF + + MTCvJWFX3ykjVPtl054syo/z0krqcacBmagocA2lG4Yael3AcxbOox7Z7zwAZjbm + + 2rxAeBkCgYEA98QXfpX/xuwezaDuABm+5cQqIXUjL2QG9cO/7yvdQFs2QNHDztqr + + /WpGxlJCOAK955HNWJ6AVQQaNsl5LZ2HaxiRNwSEiv+FKLUo6KknPDE7eppDu1en + + mpKrQa1W6+cG2Ufsg5BHr5VQr/0KbeIQ+izulsEfqxMq9PLhEYpnNkMCgYEA5P0c + + T7ptCa3eGJEDq/Q1zH0BMJMgczbljT559psTmHVcckW6R1x/SN6p9wH5vzUDqlVy + + qeD9Kz1aG4YvWJXWh9JgSqgkeJVvfRm8SUR8CDunKshQ8fSbqsFLDXaModIy6sUS + + dEgUpC1c/ufkrPeeGI2CZJy2Uwnuqa0jUtGm5lkCgYEAySTsAfuapA7LTxroPTKp + + lPU1UuY7A11MfTdG2c+dloK2P9dMBOHoIRqnjJf5ZGltbNMkh15eRybGdVYJR6wM + + 5TgTpDvJsuKQYyT3qjKxRJ+fbwBQHoah7c5GtFIaL/flyn4mmASI/hXVZJqkXeLa + + 74+MvtzYbdVo2WVYrRnUgusCgYAdG9vcertfrp18C/smgb3RB9b94MYQP1tA8D86 + + zQ3ZpJmi4SBD8AsyLTP39WVVHB0iKwiPdc1ZEMyCkTU1kp6Z13FsLCGuvnhUs8/O + + lIkb1tFyS9KWX1zmgPnUdUx9SaY1V+X3qC4PjMC0mq/kGPoc7ugzeARpW+rd4OeL + + oKERyQKBgE4p6k5qG2JtFc15uYeRX9Dg+zcGDbKDJIHK/NlF740a9Ffwao7ul69z + + qx5HycLgIIk+uVamRu6Lm/8if1E7bwf1Phr1GV5qLm5QeVQXhAjCFL3d7ieNrbQr + + 66YNSC7CyUg8oj5r9CPGrFrAQnSqT/OH8Q6i4RTMMaX6YxK7tHch + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:kl2jayrstlf5q3gax7o65ybivy:mnn5doti4wllssdg35ymojuiv4hd2ir7i6asurgms3ea67watm7a:101:256:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:rems4oug5xkgjc24vouktsjheq:jkytq32l7ih2xsaosgrrjhsblmyjnxn23zacvefyg6lnh2s2fmxa + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAqt7c+hoHCRc82m10tbn6HkGoPCP8ezDEw0jxvH6b1ads4+Fn + + tzavlbpSY6oXnSvISGLfOuxnDX0iBJ25m9qJaeZufP/uc94UPxxPIjyKrC/87ixo + + Fi8Fh4KMd3ZbJbIoJi5MSnONEoecIx5lgPf9ckRsq0UqsHHRacWiA1M1c5ZTRw7u + + LZuaB0udxBFuvsPSB2vejvqLMqmiLUYn22yrsbFPlufUw6hh3QLbjiW/qQB3KflG + + 70W/6Gog2aLErsu45RG+uxoM28HHuzinYmnoSAUWmA6D7P+gEKtyS508u/3EWH+l + + O5BC4s4CJRDDaoVjShWwcICwotnQGF8yCjwlRwIDAQABAoIBAAeTD+D8Wgx9SGLM + + ZayP8nZN5cseCJleEj2FPxtifL5OCNsvM52hDHaK3GUeS06vJqviyiTUCZtvonGU + + RlU81548q0WE7jPvsnO7vwb0VRdd8eHi+7g5XGQ4lXPO6NUfySeBd5CjVQEZxted + + siqIk7vG1w8JPA5h9UJcPZrVIPJJ3eF+wtJkNh5Vv1CUyR4yER0ZDulSJkrccxqW + + ELMkpLn38wc8iFsa2yDWJy/h/e9j5ElhXedqYC1Ii/WKp2jPebd+rZ94/GXu7/yC + + E8xABg1p6MwVkVgykYwYrlS56fJ3hTz+NdGpVA1e6DklkD9KvyL4JEm7Wmk86Og1 + + A7cQJ7kCgYEAwSC34k+SpF3Gzci1Bb3DJFSwvX46ASHr9jRQBItP8NGgw7leIxbo + + 8ebQo1W/9peZiZsBGGXSDbL66+ZJ9BD16yF5hoKzE3w3AAEmYqqyl6PQfGMpatuI + + wzl4AmF+jQ7dMbGM4UDXrGZUbM6WgCcDcat9LEQafct53bcHPxK6oW8CgYEA4n85 + + iuvaH6HON4lik1yDMwlwgZ//pt1YpYWg25Sb7SbhzLCXhUP0r0XYdCrXROos0AtG + + 59c4uMY1bG2lXXpKEv+r6yHkmVSshag8gle2LBPewYmeULxoa0FsPHYW/Wwc8SEK + + ogkZzuTmPYXJbqVGqSqx5rdV5hEqzGBDf2giHakCgYBD+BjfbDPm5x4lpIKZL6zz + + J19AgaE2btLVxpl2z/Tlg1F6MM4BuXloUVySb4Zs6fPeaxAanxMrQRdwWI8kd6el + + BhX4Eh2mOOw+cykoRn0uQzgH3vpfoj3iv2IOLHPWfym36I31ZNXC1gzWcmqjVZev + + tLQMFTfhl/Ae6OCDATtvvwKBgGe8XV6DJyPVt903zy4u8OgvKpgz76M9PZyR11q6 + + da/oXwKg3sTqmuar1rdd57pohp3CjHci25fFMDK5BUQK/mI1N0g5/bk8Tsfohc4s + + 3gLSFvQNU7UmlayKCkimzWDEY30M5RHRmUBpFgqXe+pxSCuyokhJL85vjmqMrF1u + + FDIBAoGACVQqNIjcyMXkw8U2b2PhIIlUjTOp/l4rZh5xXdvzqnTPGCDZnVSKO3++ + + XNitZKlJUNWzJdUxIE7V+WgDTcNu8RNZVfBJetNnaLGol4hPtBE8QgD+qs6rOg0e + + rNFOU9pBTSeDNM4oovChqmOj6zMkO8qeUlOmlLg7ELkHGLfwxak= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:ynzckg6zuaoi4ttwllb2b2o23q:sbrcnxnuqnnefcqeg5vglctxu565gl73fubzmapouivrxjqz33zq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAmCloFzFxnh0SodP3jlmVdWPwHgx4mCHU/qAxxWYASfX1h910 + + uMZTsJZ+O8AsIFfkQtCy16C6VneL68JZ/Aq4qFGgajfWziGNrFbPoe5gxpl+06vM + + ViGLjYE4Pn4qM5tgIe9U1xby62nbYEQVhe/ApFD/DMhCfIhhpBp+4vUtSzXQaxjy + + FFyusFTNPHD2fD7U5CFB00vStQmvmSSXeKcdT0ciQmxJh1dSgPVMbKFO9tM9TeNq + + HwQzOR/YZn4Y7zxqsHJ8wQS83YBYqpvDfvK1ILrieboW8EJmZsiM7Tq3NCcOBOwa + + n4dYjNqgrfkcQ+R0eMqyhTBoH2U9dPe3AMZ3kwIDAQABAoIBAEsb9VOthmYD99SF + + 6ycLNWly4W4Tvdtqp9bggHDuPqpDjOV5/UnQLDN4tesMmzuD5xrMJdumbRSNgjXo + + A78UE76SPFryIUgy69nsKCXIo2ClGCOoI/9II7i/1mGSqYY75iIaH4jkvRhTcoR8 + + Vxt8E12I1b0bhSYvs/LrWULyv17l+GBW3QhLZRYpAVpXipySK2hvzNS13z6SPo7+ + + wwyYg5Si5+WhY7DJP1yGku7ihLGw6MbHv8Fqr+L7bceeCAZ2BAoAP+UlqQo1UumM + + d7BDpicjhbQycscf0cNVpq77uPtp6ULQjkur/GOEU9CkKr94uThABqVID+oQ59TY + + NuevEJECgYEAvEF1f151xSw4jZAsVw/ZV6F3xslnc8cJjsXAD3mb9bbdVUxKU0Ms + + VQBwIRpx+FXM/gv8dHPEITM9U4DM3DjAVZEKIPxmCQwiaf8NQyCMVtoD+2VOpVbX + + GSu4E43uDVg46ECdyrTz2J+cc6so87sWbX4MMXI1z7kJOKhvg2cDm+cCgYEAzurk + + DvXW2k9XvvEv5dYdKRqgUpjNqNqFij0nQ9W9JHvz4tR5eWgSXMgfHyeJKMrr3Cbh + + q1IgIyJtF+esFJZ3cPdMzf7ZwEZPF/ivngnTgdlOQ69lO10pVALmO2Od82HBYjxS + + m7mvRoK88E6j0PODjmcJqLXM5MN6eHKyvwlPMXUCgYBdE/RXNEoAYfvYKmdx6Fkq + + laAV/jCTMt7L44QxYow08eP/L4g0IKtDn8LQ6zVcdnezSBPbM/3N+Hqi1bT0UW7v + + H5YldwWwBXric4OIJAifTI3Zd15qK0SQomgR6wO/P1Zrpr8doVhLS6dcHU1TLLZL + + Dp5SuEhY2wDvLYBtNLq5EwKBgQCfXBSs2PXSSQ1BR6wmDVOEFrenJXwvMa1rnFGj + + UvhLIxPgfNfZgyexQYeGjQJ74lzovyFKuwN5S8hNguXrLT9sR2pltIOsK/o6chN/ + + Wf4FoYE/a9RBdiygQWNkFgLOMVmo+OB+gvHVElfFlCtigEmv4Pd1ch8NiOfH4D5+ + + FwNhCQKBgCJIoZu9Cef70VcRWjdsNxbI6Da6zulD8gIbsw2yyR+c/qjQMULIf0GB + + SFEFdQNNn6eWRgwK0hyQBi1UGpR+kLEf11T4bepWD6KNbVwEUuve2TRTCWf3GjKp + + MTMJv/OAU6uulvOsoBFhHnhgOj+IV9M8GgeDyVPXYL4+IOjTfxCb + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:a6wuekh5mynr4c74ma3b2gswfa:b6lovwnbv3523n5kaxga3ruxa2dvxef6h4a2jnl6lasn4fwvvdba:101:256:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:n73xrpurczd5aoyiwcvpnjnmtq:zq6mwbtqsg3kutvuhwrlfhmiu5s4qmtbkccv67p226zowcylkaea + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAsIX7cTKvU5wt4iW8FKUMN5i+uZCAfZrq/KdefeHFnYJStQTl + + ov8IrO7aArYUh8gK/tPVCz2Yl6JV9A1Y/8qyzBqRVAT4vIDNwqyVwlhUJQc1pwUr + + xiSsFroLCR4ljJxZkp2CqJSyrYHjVwAs0Sy6L9v16gV8wOAGS/Z879nb2UB2RZzF + + JrRAlAy5P54DvzLA2t5VMzV4TeZgnz/YlYHLBl6e1+Xj3JU9KB0YoyCbSPV8kgKn + + PxmKKCyVxfFSpqqBWN0M3s3yVZ42PffvErzcXjNzx5LFj/dCRBmU9aZnwxHpD1SK + + d6EVSEZI6Yq6Y5PhYW6bqTUImHN6+yobbPIkKwIDAQABAoIBADBicSK8dVEyGGOJ + + 200/ViNxEyoS4R1Mlsds6toPRdbgD2J9tqHgTNT13TzsAqGbI+RoVNdxaT966Btu + + gywNt8d5KseAW1tz5LJNEvmDs4C4wqyGntJ/X8oU8YxsvncVrfmhgdxKcdVcKl/A + + 9Qfavif7HyMnoOPPI/qzU9h8eyXHb/A+HBAUsofDpwcATFTCfgDDAQcY8k8yAD7r + + xI4VshbyVlIZrYgdVLKjkHNf3uuUISQ6Lam/pMyatutyQmGyaL/NSG4PbSYSLlg+ + + q1tEmHqDeGWsLupb2qD9Xsk/bpDD5XbZpernC6SVc1oBSNb9AV8w1qGT9JYBVcHe + + g9rEx5UCgYEA6gqEZVjgo0kbt+F018JjtDeC5Vd13nkZ5jVxYngRZhx2rIu5bysr + + hYfnW0iEWNcY2x0PJE0Z+mO78g8w/pLZFYl0FIgGFSqIHMHrEGG0oexos5ndDl5R + + BlToPxA7Z2tbsNK2YwlKgM+0JeMiecJXEdQ1uPmFKN30CNFLzHi53N8CgYEAwRXv + + SoDEYN5YZJ/rAPLFedrmm/ima6YCBT3gkVnaZDwX4ii3hgSpr6VHktukf+dIgi9O + + /bLId1DmGqFLLfaifjLBD2DO9UCzWP0WOz8POq2XJg7Kdsc9UUq4dfH7/rGdk4L+ + + zvWWx9ZZWNaACi/JXUpeAUyDIVWHn1KLWXXL1jUCgYEA1HxZ+d24jec5WDhEqgNe + + HGft2qUOab8PSZgp6lnSih+7iyqMYCcUq3ZZEeKD7ljTw1PdxHqP5GoaYEl0lRzk + + JQ6XqnBY/WyRCXLyJPxgUEbgRHekYIA3FgWOmnr1RA8Pvzl/x+jOkKaDC4btbRiJ + + jrFZWSiJwjHJdxv2spzFOocCgYB/V04HnsDk+f7l7in46COg5+NrPiPTnxp6BoMS + + mWXU8WT2/M98jZqzgpefnUfyKsDBSx4XZ0+akToQmguQ9rXX8PUuhTQ4v0EJEXEW + + BdKvakjjCqIwj9o6wMLC1qLRKKa54IzYRVP52731PxIWpclxw1gYFzPsShI12ySY + + DX4veQKBgEXU69EPIoJcr6VAkK8nBNR8IC3KyywyYXSPd2ClRxFn7voo7anlwbFx + + pgsC0o6FkIswGmo7sdDbdpWH/Th1w1dsZVX2ZsIvG9JATj7/OJ3trt8YxTRz73SE + + 0c4pi85sMLZXs4mKyxpP3U9rdIHi2+2FWzDoHenktW+pGsxRhc99 + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:bhlcqlyropnz2rikjv4f6fcaua:tfd4e5zhktjok5wdltqic35h4yya4ohubpnymwu6w74qxopby7wa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAtt5BBPkmlQ3RzinuPNFTEEcVwo4ApkrWk+zeeAv45dR3LNpu + + um2wFXqHUc3t4dukG8bV7n2zIbvfJ2rjWzCqBXAPgzHqm+ks4fjtsazKTu00vU8G + + W2+zyhDvFiiNJpXl9C4E4Pb6emD5vAtUyc43v1ubBgmPUB2gu7ZBhZHdQY2jL1aF + + EQIbtV1tzjx4eV5MpLiv/NnaEz6WxRdd0nJ2kfecxgvTZWdXxn5HnKEgPqmF4Bw8 + + +6sn45Og1yh84TzqYAzemdi2eFozKLztgUH2803XdPzrf2dJ6a2QUOOxYtQCiTdj + + 8EM46IWvl761+XEnHxyjvNCYUwVSRWO2QYTrrQIDAQABAoIBAAdk8UgcMv0v893c + + QC/hXvR3i1+0kj4nJIoSt+Qux7+zWaZMptGPAeG8dKBQLWBGm1osLhZYqtegWyOi + + 5NKZIybZIydw60WmphP1FtdqXzvVx54oBd/IooJ3MNO6jAqVYRkAi131Xqd4KGD8 + + LE+EsShhseEKnerlZ8xvUDLwdPvjhsZZ+ia7u4mHTr3JGHCVwotiIjKt6OZUvmR+ + + CJ9G7QYbScTp2MgEfDYZwq7PnzapZHSuaIE+bLlZs8AO6IhVBfJLORTSxudU9SJu + + 2E/t10ubaI5j2BvOcv7WIca0SrWGmb0q54n0UUog5Qdc7vNnI9GYkVygAYLdixkQ + + IzuAtVkCgYEA0iyiXyNtrUloxrEKrDRjSG+Bvh94uUxm7MW4uZoIWvj5h251Wr/O + + s/WIEEwgS+Qr+CUWBjzgRRlrRzHB13B3+qcgkOZsJ2UKsikcnZLUQKetFK3MaTjR + + 44/EzlOrY+2gc4nmf0Ihxh1Sn3IB50x2xVW9Aa0SoiabPYBanoIbHLMCgYEA3r12 + + d2SbXFTh4rWmqq6lUP54rQEcxfInxnkMnSNmBXjj0bM0i2auc0O601724H+HGybA + + KHtF9lNLNuRSsFVgcQtPSUCsJooliGY4rlXHoOcXkVYf2ElthYbRUgqLcEC3NDZR + + Z5eKC/bYuS3bHFAJVYsflr1/J+/WqtVWu9DOxh8CgYEAz3leRFqd710zQEkOxxXk + + GGJzCnLY4trIE93PT/D9ZIi5Evd4g8Aq1b2Ats3fZ+tzeD9r8XZw0eWY4Cv/NaSB + + 2/7ViBTfGTiGiX9KD0cdnkGn+2ziB9EeaOzIlAFGhJvUM5oi3ucynfbeVCXgOStj + + Z8QOk7P9W/KOdvTY//Zhuz8CgYBWx1/pQiQZQ+TBi94EL4iu1oWzeXR5Vk/SzoRw + + kEMGLMQthfEZwoaC18do5F2wt16u4FkLLIPkZS0vlKL2mjy5rhtUwcKQPVBEJPc+ + + TKM69+3BrNk5TdpCpHTWzs7mjAAUcnkir/KTmLd05f2wuSn5zvseonNw3ss2wWlK + + QR7eJwKBgCzDobkvlnchBuDD+TPuhU2IiNLkLTCoLB8Ucifp1+Te7gB6nVwWPkqG + + FPafuOHUkE5HbZnQJr9YKbKdaRJRF4uq7Bm0pgvYiZrrLalAzuaR4XlxkHHGhQcL + + +/IKsYJQc/APe9+VNpT85NTulKtBx+1tLmSAq22opfBAfFbu0JrV + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:pmuo6vpcodol76sexq7s2ojej4:irp6rxnkgwbn3h4g5fzgjpqgsvhvycxobr3xrk3zr44r64wimgqa:101:256:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:mz4aqmo7whthklijqffcfixkoi:bghtfcymccbxrij7odre2xmjc4boyyzxxqy6r5rjgo35k4xmpi6q + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAqJwmyXuOk1WqyoiVygVY90sEyxvUgibDOxmwpbkztfTykTVo + + pD71+dXfqPuHZoPX2LCLZaHdXdQdxV/zmsL9D/DFmZs+DeIL9DEEzgo9ehOKThpo + + /2NTxdFhIe1f7oWsZBStDcIvgZkVeqNryHpt7i+jSt7j/LR3MyLNQ4hVdAoSB7Gq + + CzvpclFr5BGs9icArp1xcLu1BM8+Rjk0WVmRbVqUdW3S4ksagQl+X78betPl2fb/ + + QiOWPeNhKvHD978C+iwEX/mrTvTL3p7a8kBrxO9NIt+t9aEjf+pSGxUZi5YCOl4i + + kREf39CLrgCeTXdvnYJEQHVSAM4RaPX46Ce17QIDAQABAoIBAARrg4DIomYuWrnQ + + dszC8yAYcVm5swpuZbPI6p6NilN8xlcUJVgY5m3UM3bEkToYvrHJfv39DkaFZvpj + + l4k5D1U5pJRwQ2ItyM5v8oZMMmxe0sNVYec//VQ0Nu2iwV8JVgmRmS/BJWmqT6vV + + WN/6haM20HsH+MYJHQ7UHLlme4b9KZzBv87rD/UOfOU+oB6V3ydvMoxdQggm02UC + + b2f/Mz9k2e1Vn5C/79Q+V3PjPCp30QZNX1MQB8bIAXhMhXK6Dm5MeMcTpJPHsKkJ + + GW10zDfnn9+OsaHc9exFt2otx5l+55L0/xxoIx7qX9/gkQaIf+EsYmvBhQsgsgXi + + 9z0WnsECgYEA6+q0Da/bPCjwWQddvEAlGhmJDR7e+UWn0PLFPtzmIvCbv2FCbEtj + + MpPCoGoChco91gRnr51OpeA+eoiZ08FW+czbN6Z0L5wnJCIAMO42HarZzGKstCAX + + iB+HsETXwkSSdqbAU76KDMsRI6mjQFVXxIKns5iCvTCvbC3X094taUUCgYEAtvak + + Hspo5BrSVCsnXoARI3tlwRHRDTHDqFvSquqg1+XunerPxjLYUpdr3ez91+UKXZmZ + + M5CpmdGbU6oX5smz29MtxVdo7LwAjRrUiXLe167R4p+hXUpF/PGTQZd6K5OHtQWs + + ZpqcmjnHCYHEDL5g35r2o7VeDDkP3vXUXaem4IkCgYEAubUemSuWU4wSbrKaueZw + + jlQNi3OCqAyJ5rRESpDO5DAtGgCwrdjGNHkWGvp4E+M4u/Dpwdb9oxubcw92r7ch + + BTCaW/s+uH+eXBYbumi51q64FeiS9JPSkkfnovz+LqGV/aqT+RgjSaDMVBtkM+86 + + UKlc48YpHE5nuKt5mwDpFFUCgYAiqCmCY5jmzGXW5623as7UR8WIgtV0iF6lf28y + + TOtWugkvBJGC25K6YlBeY0vaH1qNTFEGwXo+1sNzX57TapWVKDVdUidf4GTCVbi4 + + qHepp0W+hbpNL4p+VUwteoH7yyBDm+WCMftEA3m+RURbnZw//tyFOg+shQqKk0o8 + + y0sC8QKBgQDTLI8FBom/UNpBTOwISJzNIQbDv6ws1iidoMXhlnB9G/Q+7DHDI14J + + ByAeiAPOSav0ogNxoMOdHu6KXXMACriTuFa8s/h4Sno4vXETLqJrukjs265TQXZU + + 1EB0u+QnZVYXUmEGIfjr8fhlOfEkUGh8DhEW+U2QyM+wlXChr3rr2w== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:far7xpcwexy5c6rsnh2utklpfy:fun6nzy7kxfr2zsrxmkwy3rslurixuq5dgsvzw5tg7cl7mnffzma + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAyK1QDzzJ+fA4Qk2K9m3DVSqHCiWtCNPWu4JQtn4Rz3ligo3C + + 1Duq335a1RVYMayuOma1miTKAS1rp01Xi37q/o5cMEL9Y9aRrehvomYoezDQKfP9 + + pO4GQJ+WHqFCDeCj2Y2/d8fCOzmc0A94yNAJNf7+Y1ymqLefS2aoL15ElG6amQT8 + + rHKi667pK5rcHA4q0GK5osaJRQd6TR7jmzcZeNh4fq0HkNb+8fCYq2ZXOwtUM9Hr + + U9E23/zpqZCvHNqXVv9p3H+psPW1ZaN9yIA8RCtGuWgkt7oRJ3K0ovzhe+oNOq9A + + zaMFMTTvjURAvLC6FloZ2atK7AKgm70fIBngVwIDAQABAoIBABSpP2pqNFNe57Pv + + 3uRTVb6hg8jIK0IS6XNhzeSUI0pMsZdGeC44vHWJQVnZ+jwXDtMlewIVUpT/c6uE + + e4R5u0EdMCGp7API9jPFECVUxks0seH35IAEH7GsnJyntrDOFaCTBwkSkI1fd6U2 + + SpXGUYR1LgTV57TMPwLY3W0PFBmCAQF3TU0RQFK36cOB+ufGEKds2U3xJZWQV9n6 + + gVt6Izd8D8s8bbPU1bUH0Q4TZvsl9D9yabAkSmh/3a2mta3l2Po0rhtjfNXTTib6 + + yZU5IU/aYO2fWBWXK4GzqjE1daWuc9zXQQQeRRh5OVU+LVJQxAbjEsTlA+wqOj7J + + aCgYIdUCgYEA7Rxx7iM2PBjPm6xKApLNWAyk+V/nd/ccnJoWx4uZJeiZrp257wlx + + XBnSQAFE0HHvQ32RROnF/dHaBC+98GUH7RQLCYcISnsphya2PdOZotkQRXG/GB0p + + 3pt+YJAHygnSiKxtyWY1Q+6PzA8WA6crkypq1NYrc9+4x/MHmWKm1u0CgYEA2KnY + + GO/ESa/dGlaY0z9Y5iIiwetnD/zJGkb76wsQfB+vjfqqGgSFisudzW3O2mdDz7Sd + + cjTtvdplDpVLx6r10jqyWU/2HvJpLVfpmu+x5jp/RQpqNnkXLyfrTX8K6ZvcKLX5 + + dja4z6Fee5c9VhY3/PRHE2Ovdi4uoLdKjYSHR9MCgYEAj/WLPphmX0p5Ef0i2jkj + + L2hN6ZJOyMlht7reRbz9+MQmOpxMvVKwXsjWnEGo9B2YtRNR1dNRgG+evJf37DKL + + A2f944T2hbINXp8kWplUWEkN1fvfl9ZtC1jA/AO2lvYruwtlhLfncx0udShbp1Ah + + 5rIENsDplOqqF8v4OypoPWkCgYB1jBA11z+DSuqGM51OXvv4P2TkGLcdsWPZ4dEj + + QCl9biNswCYxX2qkVrwSjBTB4Wyk77TMFXM2oZpaQx2OAm7D1ByW4A8D0zjE5QFU + + kd7OrcYGyxO84g12BA5hSR++hlT3sWLag+3YmBAOtYsNfZh6oH0/Q8IaOAwMHeVQ + + yiorCQKBgGFHKWecHohrZozSwg7DJoaQdWw6h9RWMA/oOXM+80CYdbbP7GksWV1o + + Ay9q1NuZGfe2z3xXYP3F2wGjIWehqGsYc53zXu3mGGYhvQJzxyRCwAYp1Vsn8R5s + + XWsmcm5jw+o0N5vCjq5vDqlpjrnib9Gdbz8/8hK6wXZlUWyeudSC + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:fh4boug3wkciqhkgpusjsjyzbe:sy5lwooxchqu5mrzwr3mgc7qtwfjgmpz2srdmwpaip4iuj3tn4vq:101:256:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:vj2bo3rs7lkwz5lla46j5mfd7a:zfqfc377sixrjzajsk6kf27ouoz5fpdgszpg37k35q3ccoie2mxq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpQIBAAKCAQEA1Ct7KgFNZeSkYGbFtOwIHbMXiIr9zYZLKsHNkg15XGBnG/ii + + 13p6Sv1XuqugHcTCk+xXjWL1GjB4xxD4Bxo3Vz30T6EpDVd+6FNXB2YO97NJVrn1 + + DNUYgQ0UihnEo2WThNGcRRmthyYBPYGll7TgbgNMdhazOtX124mJM1qA+OlRm6dJ + + fF7rAvfYUfXSmKKk1pWxhX0Fk2PhMGQi7HSMR42dgy9ZmpM6I5v+CRflPI9Q1Lwl + + gDjpZA/nTRhiALhHMEHmOC3aCSznM7Glf56MOvuvP6L+QUnK4DYDs2Bv4oVy1EVY + + dZFQ+2nh/OWjW9igPOhYzq/y3e0XCvV3rGXWiQIDAQABAoIBAAG8aHOS3dIkReMk + + 7QNqnaV+yPeel/V4iWDo2QiiAHqlrmQSMroBEBhtbHNyVHzUiGsIiR+96mzQNZr+ + + 6v3wVE6zGRIyKrTuy3LOS8Jw2VUrSF4cn9eNCXhKLRu8KOfxytGl1IRicZ95rwTq + + CRdDHvBOm33FoxwAy7e8y65dcMLt7mmzY3V7eaUruJx8fRob3dA7POIml10NbM2z + + 1TM65uqrVQgihMlQg3cArL95K/R84FZs23V1+EaobpC7gpvFn9J13pgXhT/pBP7s + + V+9tXPmITVDaaoO5Bw4Z5EqCQCEEzqeN6v0agl4b57k2eoE/mE8p+sZ2gyPUH0Wj + + llFujMkCgYEA4X7MtD80nEA+dg6uRhMnN9eLVmVLHXpQpuMdcdg/5EXPUCOUz4Xk + + I3N3Mx3EVWOc2vw8gvY3ZbS7vpMEEzCzyoYbEPa4fQ24UQ4aI1qL8gFuHsA5ZnUI + + FcvnTyZsJgoT8rRTm3+lsqmkzAhcHVMH8W/Q3uJhtCtJGNEzo2yyiPcCgYEA8N8z + + /s8gU8HA6hFQw2drjJCglJnrzK8jGq26bnnmLykXPnTuOwQLH2gKY4PRqPEOtgvp + + yEMXSGXktXxMNvdfY7FNDZvmdBBVR/wAPFbz2yZgmdAQdZHpmRAJPW4kJlXSTmg8 + + 6QgW8bsYV4RNL5f94IOk7QinchiF3jGaK9GWPH8CgYEAmWNLlAC6pN7+ngf2fCxj + + LRUt7yMQKYkee6daTCqxq3HhR74sZ83IFmVg3CCPgRY1iLCz6NHbdQ+v9j7DMtqa + + MlVu6+coL8i5bEmPdiUNtR1L7xcK9Kr/SPRe7/RO9ME+OIZ5qPj3mcTUGQZGwpvM + + d2t8RWDw3UHkg0ErQyuZdpkCgYEAzKtsG/zVpDXDfWCfNpp/GV6fBAXSBgdfFcE+ + + 47ayr6oDtS9Yak8iQFqAUVTl5t6FuIxg5qiTdRIXh1qJzD7gD+7M4V5yMHbccCEh + + 9iOQa8utU6UnBy+nxUaKA2e+UdCktbj+4KfeDyMCKQMjLujAcXCKyFqNJXbO8SFG + + tisNtHMCgYEAiaub4VuVuJGuJKYSdlSL3G6NGZaXYqkeyx3AiBZw+qBoECNIjVmr + + afsUnv5ocfpBc+7zQGb/hmEpAeqxMwza0oMfJSt68kLm0ljL/kUxpRR6MSv1yPMQ + + DaI4cX1tEURu5Wqs+iXtKiASxFNCXcD+tSL6937wef2BDte/QFWEyus= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:avc56kylzakxlqqhpo52hd73oe:c7x52qxnbsjgdc5fgxlrc2as3rie6x6ro266qnu62dbsncn3l24a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAn2qG7SUv6kD+8MZ13j8G9Us+w8B3/j1QC4SdgV7qoQ8ziAFx + + mJe440QDfjFQNhPtoa17RRzzBeZfaMu83oBscl9oqBVf+WuxQJlHNh8zVNPZEBtw + + VkA82X7RHzNjH97YU3DV/DRypdMPCmuIUW++TI+t2c+W7KsKPAOJx6rrJHK+3RgC + + n2VuyQHhZkLqqNc3ZexwoKFGMHIB9XtHSCSAMakD7o7ITcqp9W55xMeLPWLtEvnr + + 0k2uSWjJ4AmKNf1NKLQ5eLcIzBi04SiOAUm3p1gtW+qPfIChbV72RB5ZWL1miiaS + + XpE+F424wm4pZNf4EwvRKKcX8QEcBMH/m2sVywIDAQABAoIBABv/E9oS9VLA/mTf + + nbSdwgWTJN8w7oHWV7fmHtkpB7CoYEbq5f3D64LyH2DqnSkaH9oMgwEUv/NRzYC0 + + gyNaT3FYoyMdueCuUo9DO/fby+KCX/UNtJFZL7aMqII/vpFKzBf/UX084sOPiO0u + + DF8s7jE47HG7nMhMk3wNrQVFVY1tWGlL1VUgt4ICm8Zz4+o+F+P7/Zp8fZB9iGNj + + Zq9z1q5VMDj2wdNEt+vvLcWrvBnphmqYj2axk5VWi0LfMMVycWGtsFV7JHurNYBa + + iEJa9Ew1LxZc5Vq0s6RBtNjT5rDqrlXZwZi3nyUHDls21auke/ivK4PhQWz6ThZP + + /u88Z3ECgYEA0aeS+9HC2wsBW7SH87N0Be/J7K7YSiAnWRE2gyi9Lc9pcB9zsZHC + + NkJykJeiocrDduAm/EwjwSgP56u9ESpIh9RK4XdoSUmlYlcxmCekWNZVyTNoWIY9 + + 3wDOCeEK44bPPl5/dAWqlG3/t3BP3UddoZoosJXNNMtwb8aq8yJ1TZsCgYEAwqfw + + 0mxNAdk/GzT6yAYf8Kf+eDCYhzlnnG0v3h3Eq6wm5enuQ4TqRplem3m8bs97hYsM + + ofso6HjsmAQtm7JMM5gduBERIx2cH1uIYRhJhxgQOwq8yRTukzRGEzi+Nyfmf/jZ + + Ui8aPwRxtx0h6g9C8LhdORVxISR7Mj1mD0fw85ECgYAnxGBl8ZjDUagVS/4JpL1a + + LuyfP175WHX+N/yeDkkr+k6mnOCmCt7KyfnPIWQQylQfJU9fxdV2WvIBYJsBOYL+ + + eK8nay3V0OlU6PMYSFStISKugljFidkMhquORih5leWTj/se98AuXVsG4X/UmifR + + cltLe26sF/agzQ86BQw5BwKBgDc36tHWVRYEKamvIsDhM+hRz5cKugoKF8FBHAYX + + TbYhVLt929AdgVPbqAHUy8ZnZzPf2QqOM/GWdA8/iCyVrJYqPav8c28RtDsU/SAG + + Ar2m7tvA1QL5xB/QAVzsiNEeqX19+zAcGobr3NJEGl3KTIP62L8bvQbY0XXUAwKs + + tsZxAoGBANGJEzWLUx7m4ZLKvapAU1FPx0pqqZCyzrU02mg831Eeht9K3s7B4WBb + + HMNM5wdVuN0eT+hUEmazU6Hwg8JvPMCrWVLgj9SraBgyTWLEMAbKY0TYYjaOwhdy + + 5B4F4j+30c9o7l7jr2x3I/cZETNM0avvB+1sd8AgKk9px2oRYqEv + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:oakc4ghiol3loekapj7br572kq:exzvg47pa2b5v6tojc4wguux4pmerisstqacowbzwtbqybsxtxcq:101:256:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:obw4p237di4oqr2qlt6gkodahi:4f7ql2uzoornpccbjnmaucgnsiie4mhoqq7lnir423nvfqfj75oq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAnP0nyUESoXrvtjUGHtMh6BCdCVa4SwMDktzM9p7CDXVjr1jz + + EH6I2Fq1EmhJJ1TbaXod3s4SRuzRw5OGyAaX2PIzkntzpdHKai4VEeRGJTGUAh1+ + + UjNoUHSTgoiPf+VuBfl8uHUWe1uIKPEEqPDddvzGR6iFWTfp+eQHz6w4piAeLlth + + CA8+Ti97iuoqFk7Q07aPSY/v80dhuyNL1nMwHSJWePYBODTNGc7RsUa6He/K5dK/ + + dptSZGFtHPZ8PsI+C4KqsKtGoyIcbefUQ1QlFJcxQbq8pr1FtCHZXGXzGcza8od0 + + uziCBzU0iVHyqrkCgDGcjSci+z82a+HEEtAEzQIDAQABAoIBADqIi3KXAC7USxd5 + + SrhoiW5g72RhgKJ7U7RI/mT/yaPB/rKM7EfcngJpQ7VCy+/NzGdWAFgoJplqSEXv + + NiRTjP93QvJddD/B6oJPf0yl+993TlPBkm1svHqvFKbpavPJZA33OWD/SywgczKs + + tsuUz0ZDtlxWga3D0sn5E06DzLVnkyGqDW55st/lYx4sTJ3luRd6tF+y0vz9v871 + + 6N/t/j5LcvaOjuLTkOmvoCG2cOsHQGj7rlXKIkxiHaIbFONEYuhK0+txs3XfuWsY + + +2yfqQiavT/1UyfqZu7J1GXS8HrhtBxR3a8854uHUiaDP8ncGUEI9vJ6m3uM6rMz + + UlBhP4MCgYEAtn/vyTqGtzTIfh48aUfiGFOtshZ5MRBVtcG86GIoGSK1wN5Xwoku + + Vtwmz73HPbctd8WXF32OpKPwoobM1L816sb3yoDSTLjC+nl2vXlPOjY9eVFZEaht + + jQhF5V25CR9sb2RwhnriXz0rfW/BoADvYm3lh5a7l87enIQI3vcovs8CgYEA3DcA + + U+S8zq3o+PSk9ywiS5rJ5W9mfGzVg0v5UvCNTMBbFfkkh1206Oolr7TlAKBbgM52 + + Z8XVzosNjU02ULZFA8UM/g1/t4kFf1LmQ43rZm/TO4Bm6l5sOsx2+Qr8s0V0ekON + + 6F4dex4n2WQx0ODikEQkcwGKVwOejTz+ydySyaMCgYAJwTbg66btvf2FeDpEalo0 + + cKyVG0xpCfV63JsrVKvOBCPw5jGMrWZzsBrG+d7fdp4Qi9gyojxwom6nUUs7h+jq + + 3q25/j6/aRTK7JkjMYvBkcqhZG69WeJZKnsJ8oOEcFCMd7LoDUNyUcO0VbfkxIgH + + G9ar86udRqpxdUFAIbfk0wKBgDqZDCZGxJL+pfKxLsBy5wFVRAogVZYgY8RXUBXo + + 2sCkotg6/qRipAQiYjraGOHMyeyBg/JjK1yVldqWxDBAACdbpPRpZSXSeTsDNTCe + + sBgHA59esIQG8ifHRpVIfiu5/J+YIEfH23JqeNIZHkRlwwP+jfBoZYZ3+RW+OFJA + + tnKfAoGAWrOXeeycShbIKjWS1XljZ3+Nxd7ZARX5pf7FvP+MwqVpW7zEgcG3Rc3I + + gkh1In8t7bzKhUVMLDmJIZnpMFNUHjIWAAshIQHivs6d1EnErqCHkTEofQnnIzgG + + HzUTEC2ppRiXZLg/5l+opBbah2afagIMbODMgc7KEmVfdTjkDwk= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:ytzxo5777my4naxdqn6c2zwmpa:shrbjb27qpwlmcjimpuhnysfondpd54j44c73h76eudklkc2kb5a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAwrgs9CQIUW4BZ228HTF0MJ0xGU6AhvNcNwmSJ+Of5tPj2Yx5 + + g/MNsMJYyOxxnMoODLPAgSX/J1EqU/+/RqwmvcXOw3OBmLdxnMk+VYPBZxbup3xw + + fYCygPHGR/qcQvJKQ76XvkiFaiD2iRTtX0aEG7iZYeLgcQD6PQvgMKsdX03nKmyn + + l1zWTeCpUBaR0RUJK1kwh4wO95Ma6PLAkQles39N/A4I5pBlVpN5j5olIHyG8pLW + + hvbNU1yV+5JY1OCtpoAxoKzehQx2vvKeCwlqh5gViu+FN5j1/7trA2dz7RNAEGu9 + + X5lw3tvqZ3IxhX1/4Brswvs9BYvFfPyFzb8sVwIDAQABAoIBAAZJSlCHK9glufQF + + OEWTAO/sj83fa9vUDRBM85Y1qPz299U7zdTH6spNljfFzT4JzVS+XSduOvYPV9Nr + + H1lgYv07A2TFilznl8p2FaFzRdaEPzpSlKSOUyvT0BonN5at/svtz8eZqDNFkwSP + + gVPBCGc+IlvTAegYng3WDYdUtJxDpUnO+BDg2PoZ6lzRlzyNbxiPBA7221yyBk6U + + b4WZUtHl5mfCcfMby7vaWAZtwtFiYXDeu7bOZwBtYyjpI1T5l4yUVw2dF97eAsWd + + wwbSYbVs3bspN66VFfaZQJrZEeX2gYDizQo0iROySC7hcyXQrNmnufrsgGIwhrXl + + AKch9mECgYEA+sUKHB1nR+Zl7QzB8iS+aIK/XUgCYVavkg7eTreUzVe8/CPAEWGW + + yQnvDlWKWSnge+LtEHEWYmNedUhMW8zGx+b8/3aGMFr9VeWDrFKGe5yNnGms5pkm + + RJrpJxC1CXzullHoIQ9Gw4XQStaSqK/ShJowh9q00QznV0owbKMXW7cCgYEAxsfc + + eKvlwgpyddL3WNSXhggqOjwd8cBIku8GoVyfzrgsPYHPoZSUZCO8iZ/Gg04tbEAe + + oRLLYQ/5i5kcbFD5tbWji895Lwds87Gw5TAIAc7f4Za339Vqpl6dqOOe2pi/q7F2 + + LjLeaOfWPFsnCg0qZ3IzADiZ0cY3KqQMh/td9GECgYAaeYj6tOP9hEaIg0tKjDSK + + Bhu79mlB64v3qJgxyVHtZ/Ds0b1qWFo5+VGCuuczSKeJjMiobrgFRSZozWw6WOE3 + + o5xcQCAkpMaQNf3zyHaoQDv3InT9l3eh0JUC6dGjIcxylE0kiF9ZLxxxejvbkUxx + + cXHkNePXGjymS4/XOFSz+wKBgDVvKkvh4Xw8tLIJiOX/F9A2x6sp197RknC1AjJE + + JM074uCR0Y+c0hrtJFRWd9V6IWm0/sbLt5Ia6jjlaqePSODYt+LwXaIPu/DyNhwV + + wkFCLBqHGlx4ERgx3O22alBWuUddB+i5UeIfWA6XbjIcgeaW4zDPBkJGpzO2L4wq + + PQJhAoGAKGFp1XoDgr9k3y4yfUn8AsLauTsZn0JZk8lvYuZQqMxaV5F7riF6jYkQ + + SlkF8LATvS/0QUpLOuF3QiSafKlXpAodQoTG+vBkaR708U5qN6m7fFyH/S7seaKL + + m23LxcRu4bvsRAsPC29MnLdhECtTSr6SBrfqG0fY7bm2Bnpolls= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:asmjgajvwpwvylxdcf5rm2gyd4:imwtdi4eqq3wm4bvk6npho3ta2fewceqzl4f7wyyabg5i4s6h3mq:101:256:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:vyjriuuydnhdjssca562b4qkue:en4dcdgixll72bqyhfbfyzp2xoood2ti6x6djtvaritkvgg7ktcq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEArKoEUAfL/7SQTQnIgVEBkZ7WYFHMKO2DHSDnHT3rn4xn6D29 + + u224k2GNtOQ/WiwhGHyCXKAY9fhBReTkmMeR7NZZCTgafZhI8LlVgw4NTTZhHPxX + + HPaLl9AtWWqPqtSl5NB9pckMoFm/E/dWOlfVmPFAV0VtcWxKis6B6maFKDxjifTD + + cMu7T01bG0/WDDYZrok18CHbc9ci6YsxwheOo1O3BL9Id3ZzS7MkLjguT5pS7b/A + + O7+ll2v2QLdgwR8hXLR/OqYdQA6HyGi38DQ0YaIMwzKgqE9US6OYCpiD8SU69dcU + + y1IncnfkVYPivmfABsaxQNndd3OSWc6qoJnjwwIDAQABAoIBAEr6Fx5TjGuw0lqJ + + rYYuEXLVGP1Bd9ir7pv2/jUN/uPM+g/4w4uApT5mhbzvwmzbLdHuu0MSiFRDJcD+ + + mJ+ZRc4k9AvTT3mLZ90UdcQPlYoaW4hVMVTT4KEfVpn18oX5ikI2oOEdUTzOS/GV + + HV3/ZzLfTBO5g8FVh3cIHpUVSKxD+h8mbCTiFlgL6kDWEiUbl+LdON4c+uatBzUU + + LNtviE4166nWK9ruVTqGVL9TQ6kTEFUwZNKsVbAQdpyV509SWP29LtWevXyFBcWU + + e+RCZyPZG0cStomWPrmbktfgSV1ZsjgNdajQqUYzc4tsZRnQiRK2+0qcwc07r+kD + + ZsU3rTUCgYEA3HKc6riwJKRIAaSK1gIl9sqvTPtvU8zTLW24Yj/2wwFpNj0uGYnX + + EorA0yt5PY7bW55TXCgRIk8HpuYdQiH0atitjEd/0oVzpXW5hFDhLYh8kGQv2aly + + /t+y06ZIpw2QF32S+PsIfDztUuNv4qLivtu78LJHxEZPIW3UEdf1Hp8CgYEAyIKd + + YAOZ01wfgFhP6gezFhlHgn5ThMpYnNYF4QDwfwK6iQ7CagzyqW8/lfggYooE/QCN + + hqRGWsNh1/bndt7gXvF3Kvwhhx5FbHZZdfU4YNna2BVtYxxXUEgxqDNCDpe7Q/2w + + 5iOg8oXMLxt6fI8iObLNa6EInHI5rH9fbOlPvF0CgYEAmk90Pe2oBw4kBVpbgPCi + + CH3adeWvCRbgX/Vk0wl5PwmWz0vGIERXk3gi/+53gLqmHBzYtzKow75UWeTMaEWC + + ZORln0NRW1jlGdYtVUyUQx4+K4il4hP2FikacYL9akpZKchSAA0g5G51pcbkw91H + + IViI1zTEfcTFkV3iy9bCk3sCgYAHoJhV960ZUi7Mlg9sKqDQXWPP/fg1W/Ek/is5 + + FO0RF8x6vDn/CMEOWvIDRW4N8YwhB61aitM2TqphKb5CUlYcpnjPBMpNtoQTjSj4 + + CLz9Siw9/gqsM37KygRBjrmbjoAMJRFen8pWj2pl/FibdmJp6XhQ+M44DUxOWIYL + + wZBL7QKBgQDKYr2S186YX9X3Vfypoq6s5Jsvq//smGYzcar1xIfpLKx7+sY+Grym + + yVE9Af5tsvYQuzSmZb76E4ro8uoq0+5q09C0me8ZUhtDyotl9aBpK11eldCikWAr + + rCMfdanQQ7BakB0tj4GBiTYbH46DwS0lEZ8hcxQdBrL6Pi2TU4ydYA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:sdheilfncok34xxpgh52hgiyli:zq4duuz3gntecfnj6o5mu4rqkl3edfzg3ohpqdn4jjy37okcefta + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAtNBH7DSJbQ2f1i93iJVTEOt55EDlz+BTI+E5bB++KTHobKLn + + RJFvxTX3wfwrqs8KpCNh/YNAgwOuHlzmEvE8rs6eWXWo2Ik/YvIeBaTFynYjYaoK + + acMBhGCMHyfc/1vQ80+PnRYMCjJjNvtfxIJKWcT4EmGxO/gtFYZ0OJVpHJMTiaQe + + XPl378CS/bTx84LzZNGkQ9VJ38Qq3ywx/zMm2jYtABggNv+ygMRdYC3lFgDY5duk + + DrbrninZG3ghBRo6LFxYbWxBd14XrnaoT6feip3lxkSMg1BKNJxFiZ67CGp9cLj+ + + EbAADOVwFN7u4g6vuRmfGJFpRfYsTmnLeEQCYQIDAQABAoIBABcHbBGmg1ZTZOcn + + toa71g+Snjy3E04NmSk5t1GRHWwrwhmMCf6Os3ifrgWT84/WvNk49HMQc3f8UQHm + + /RquhPcSs9JbDP0/RcZ5Zd98JADsWQdIW/kqcBgHH/Gb5ybS7+L9YCI2u6PU1RQc + + og7qNUQHtTzKGoOz0TIrpMPMK84Kqp3O1RQERX7iLef5d6N30FRguXByX+ixLXNz + + elAeTaTzexLdRwVBsCcYAEaCerqNznHbSKIpHsIApYYp3ZzPls5qRmFX81jTngwp + + 2i9WV44/B4GWH/ttHHlIrpiUijhPSYvvEf0dwKtELxP1h1BgHXL3hy2lJyGUHFHf + + 9sQ4hp0CgYEA0CygU/QTwP06IFUlyH7O2LIGcDcqeTS6TPuaxGpzATMqWDVhqNLw + + 49FTKzfLHqnUSB86c38215CW14dXU2DqQDG8zeqhdFeLnelcQw4Zp6BnUp9YyVuZ + + S8OScGFyt6k1CmDRiVYyaH8YGQqWBkORSFRcULIVGS13hFUiXTNrLEMCgYEA3lp8 + + cuIQBerGla2zRaSwD+WUxSxa0U9lEvV7Ov0KEX6mf21veDPaoCqD1O/Wo04CZQ0d + + 8GLKm7OL2A7DqpCs4BAew+fWteoHUsujii00kfxh41WcjkN/qzj4K6sJDkuA1wnf + + usa5QExLz7C9yFOsXVTSlimBCvlzGMcAr83ufosCgYBhzKVh66ggIZdeO0Jt6A07 + + Rp+5tmEQ4lGn+whhwHTZGnWJTULdMoSTMvM0uZiGhljBrVIjkp9sNHR5Ow8uj7hd + + gkBmKRXC96ITBOAgbI5m7ve7nDr1FkB1lKLGgzGG0Uqm3odyUvmJmDP1B8Elnjax + + 2VgpXRCGbJLaq7hiOtbdywKBgQCogaaCYbOG6G9qi2Kqyq3qvi/KZVzF9wdAIO0s + + vQreSz7enw6054ctjkquGrxssfe6oQApZpTo/l5idH3wSwfYHh9Sk+XxotO9+TmM + + w8ltQPjmEcE9RwX/uoLIhSutu6Z+UKtOnr9RbQCe+vA4WsDrUhbtWbLDoFuLUXTB + + xqyRFQKBgQDA0pWlsy6Al/7cokmPuxIWX6Un+o0DQb0Hia+eXlFvEcuQUQ0W2rja + + JIgZvmKVu1V4yI8M9NRfC+E6QDsKNAsDTKBR0T5xWwhSeofP8+BUqEpbsTwgup+L + + DIoa/pu9VGGp17UcNUhNy9pQ38jHHw9TBtQ57HINmKyFNQzaYJchYw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:CHK:yrznm2uuybfbda6jlj7tqs3yum:zy45lpc7ilfzgltxxqvy55wcokiay2fbbbv2wdvu6ubjluh4gf4a:101:256:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:SSK:vivq5nfnxznyjdxt47o56uef4m:t74laopuqbdodc46r2xm36sffbonespuirkipsudey2qyza4cdda + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA3IYI6nlVJ1Jjks7Ovoh6Bn7aWEoZm+fZD2ArQQGdi7RWHGDD + + hG6T1e3m8cTx8uJdVDYT9FfMH/Q6ux9buLsk+CYii6ftGeXiie5wiIZRCN8hTFbg + + CcDv9SA6sF4CRo5V2MSnNN1tTu+WHVE0G5T9n1YSE4kPvufq9tBaWda0dqEAXMXc + + zv5nWMCyJHB+zrR8GbIyRFgQGFW5xmXzXgBIrNFAoEArrinzjje3AJTRGG18i25J + + HVAYGXFbhkZQIl1D+hBDq8Cncux8z9VkTPk9t0P4MH3DAYQcxyA3oSu7XykYwNml + + cMimZpdBAzKxozLD2Kw61jAJMTuJrfXRAMFw7QIDAQABAoIBACzebrj6h/twtYbc + + 4k79KMrii52UMiK5KT6KJDLdV8dhoXWzsIRlFVpdRfSiTFJNgYzNVgEMziEgScTi + + DAEJvutoovXEbKcs0YucArSck6dY8wb71CjX41r+PEK/VfoyIsBwvs6wUPnTILmF + + WLNV/MarNhFYfWYr/PBME14dI+nQ1oFNYm6XSZ1XHmWt+tyKt2quvtQUwCRoo+HV + + D2zymB/238OcxOEK9w4cWC7Rt/x9+C/Sij6eNSrDsJ9UqCeQFzWwd3QAcu1zaeAf + + r2GDG0eFQ9Ylepg5dempFTzzPs6Wg0UJ4z9ZDd5vazGHCoxg05/JpfKZ0khBkdbQ + + Z+8ANZECgYEA/fptrH82rIyYFFxJHtAQn3bO8o8lMwYxMVmvLVMw5EVSPMyqOoWK + + idf9s9e/FifdjzhtefIng9tkiL1eAWom++KrCQZfp9UOa0/Qo7jrWQunZd4HtLlv + + C5uGHPxqivLMorCqAbdx1v9CKMNpdeRojOFYhI3qm86BNXpCDxv9iKkCgYEA3kdu + + OVDtiW0zBGuBTJM+QWt39+tE7MWkPoCHGWaz11pksI3Wa3ShwNUUior8+a9zs7u3 + + TqR0VIYQ1BIYft1gEjS3rGzrJDD/MFT0oCYJ3Zfk4oFu8qHQbjGGVO3VV6r4aXB4 + + 5RSEBxQ3pFwKnxQ0o/tJRfK6WOi+m7o/t86C/KUCgYEA0QkxA2yg31vIP9nFBOtT + + AyySH+nZQCm0i125ZKC3+OllSk1ZPllzMQjo8wB7cgzVum9DC79W7pvAHxtdJ+Tq + + uR5Sj1cDm+srtv82RcqJSfzhhmI8DW8iCney5mCKgFpeOvkUs9z8gWwOU+aiAjpA + + ItPGOzNjCWHpzs4VWMI85iECgYBDU+mcLNo2dUAtx457rmH+GNpW2wmemmMcl3vU + + gtpYkcXMALqBA+v259P3/w+PZcirGWH1zTR7Ybx5MB4BV3bBLPyxmrBC3yB8+E68 + + r6jvWRH4VfJQRhlHN3MUCJJFosDp1yqXYPZ42nPcMhD5jHpBbV0Nde9h/OW3b9vb + + Bg+BDQKBgGkKUXDFHqCT5w5I6MHReATnuENJmRTUGGCZa/tfN2GDDZA2/HRV3Rr+ + + pk48N7BZH8gst8hUwI+2iTuWnm1zenuKkiLbF3J9kzpyj4ujagXOWpGgiE+r2hPP + + ltoNSOSWFBnJEiLw4CbUInwfmwagHvThaHN97eoLDbGuVOFviM7f + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: YWFhYWFhYWFhYWFhYWFhYQ== + expected: URI:MDMF:f75y3bpbubssf334zpkgvuvbgi:nsiebimpy75qg57jqp7266brgjsrbloegjm6eepbnpb2bxltuf3q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAqsL1Nb01oNkFMGk4oZbitKIILdWtFu4Awk06LC6cLbZSJm/q + + drIYi/43UWHFpww0UI8E4BZiG1+AUmap2fsYK0vrsQQmiORhxwM7F6TeWvfa+3L7 + + 1XXAnjSFnJXMNrozxYAprhapt4zKLS1xzDWXlqH9hS4dbEercfdui0XeC4xGpGpB + + Rw7CSY7JJf/RG6XCbeI2T1lwkUhNeajy/xsWihhTdG4zUsrvFzu3eJfH9kgYs/M7 + + eUK+cvF0K6YgoFwzg3MdbQXMSuGUbNz1VJjWZK8hDrbNbY6vufP0sqmmRWnd2a+S + + gSAXl53o/y626ILVy02rCG7Q5jtNLCgZpOW/HQIDAQABAoIBABbIfD73R7h2PCMB + + ZvToVMcU91JmN/nfN2q1MxXCAkR3Fu7Z78Z2bKABAxBwoxZuomw9KMFdOym7zDsy + + R2c2ATuFnaS4kQuirQkIfVHiRWiNuUHjTYZld5WkHE+QDPcgUNgBCY6Yp3w95Juy + + fIRqghcu9cxXIsXXqiBCixU59S5FCRsuoCtVvKrZrD+9NzwC+mOPkNf4uHnsYP/g + + 5ZjAqJNQWbRqaslq8R7vJ6lLzVgjGBLFlaJKepv5cOMMpxxlj12j3gg2DWNSHbZe + + s3Hv9NyWhje5sI+96Stowc5oiuzfbiDvNsD023Mz+9rfheZdxd4l2ELrU9BVdkA4 + + HxJtOWECgYEA3/evZTGPlmpPCoy4URtj7j0fpxYVxCPlEHjpdghEywqA8EMz0MZa + + 2JHxWZKmeA79wWCbb9qvupzMiys41bK4qXsWnjg7ESNTD+HhJtpNXNkpSs+zZcC9 + + pLjABEEsfvWs6/laclbrqI3IhXKQRCjBtfAga562PkqG/v9aypm0cSMCgYEAwy8y + + cmT1N5DVq5X1Fd1LPpFvSIDjoZNsSYaqP40FkWnIMSoUswHY8XWW/0LTXz8b9bgg + + CijCavAGFdcK26TlAo+k/zQ0MwinjH348VuDQPcp8P+LAjeEqUwYngXqBpi+uw8F + + CEUIvX/lV98y627XfEHjv/nk4H7bsgUIWjYpsr8CgYEAn6syzc/RcAiGJR1BYgFG + + 8td8s1/ZUKXObjnlJpKqiJ4KYj9mt1ZR+cfB6nvUVg9J9Qzsg4fCdCXI5QaBVEg/ + + wgPQkifAZG1skAwWud4z/ReMipscaFRKXx6fNelI0ZJQH0L7qjwxcU7zP7/2/cCY + + qR5x3oedoTb8mtptXbbKn0UCgYEAuoC4tXIeli/A26n4fCHuKiURrrfpypRxnngc + + 6Yi4z0/CyKerC7kyMNbpp5OVIafN8ac0hkCYNVKQngHTEDmp0h6rzGd3kWQtpSMh + + 4o5NBqCl5PBpRX8DNjnONAD2s8L0TQ13A4Xjah9xZ9uQbkKFiOf01ZXUy2asSphg + + eMLUaUUCgYA/J5+yMOFTta88jkSCFcdlSH5WqwSkU7qvkrHwO/rEPOITpP+UbkKr + + fWj3UwDW1MPx4HFrhuDpCaUX3dq9iAyXe/6FemPHvMR6YMC1CqimT/XoJtUSruIY + + SCXiDkDZcPwqOzGy/ZJJj6cXRXbzwMxnxbPSt/Se1RHJeY7aTobIhA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:td223psbzins2k6m4frmfw26xy:opgmb6zhnwsksydgjwzpfdoz7epm4ynzmvkjuw6s2jntioqk72ga:101:256:56 + format: + kind: chk + params: null + sample: + length: 56 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:trfwvi5t2nxr6ag7n37ziyiaui:gpom7gv2rn7pfsoqr2bdyr36au4sac46d4cbxn626jsc2ls2tboa + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEoQIBAAKCAQEA24TZYXTTI5iKyFpzzyXUWZgltXj+oYogvqnh1Q7z/Yn2qxno + + 7r+lssZobVMFPbLaKVHZwoY+zzzNu39/Ahif12f/c89Jk133m6xV0QNnwiuP7q7/ + + g4hXjAiRe99xnjf0lU1AsuIFrErhoCHthj+Q4ejI4kl6vorfOJRLMdeeWEDhP+bM + + O0r6ElNwg289MaedCJUl4xMHeclfTVxtZ5qJp16U6H6iey/YF/6vN4tN18mjYygY + + vOk1pOLRHuWjVy6K4iOyJpPDcXzARLazAQQy/5SFMk+g02EIvEGqjpoQY9F5tFCa + + 0bullE/52NzDoi/5lS2iV9E64nK342s2giEwpwIDAQABAoH/IJWXrt+od6As+ZBz + + oEv9OU9cSZOsOE5IjgSpgPa3QOs5siwmZ0oLTn4lAhVQsdfaikecC0PiDuD3qN1D + + /Quqrk7BnG8ofLd2CaWLF3tp62iL9OIFC4ExfZfIAJsqQlIL/B17fRIPxYNX+m0O + + 1N6aou3q46wEjEQQ3lUk1EEtP+wbIKfC+9el4jmImdroBiV+hQYgzYCKvC7ZysBF + + wVPWZ9w+BecTwqwFelkvNfN9FDaN0TawGuTRYg2SsDbTo8NfddmoluqOryGEkfJj + + xUWtpt9GGeERBXytKY4oyEMLN+xglSvUkTdgREHyKvJdIJUI0+nVD2FfXeoB7YfR + + uxLhAoGBAPDXyXTSgs85qUSn0EwUlvLkqXX4CSr3kPudAErRe2vnB6GzIWLoixxd + + coFvLgSCYTzlQ3TXfHpykSeNmadavsDFuaCES95OwZOl9xYHLJzdFwVv/0jv9Flo + + yzOyajThxBLV5k/vnoR5igK10I7YsT2tTHoPI/DA/+gq7VoA/IuZAoGBAOlVgyPy + + L7Ntu5IVokLFIWJI2dmBvW8fBUjo7+lH+XBkDzdczxlr6ZJMRFksgP8Gk0tXCah8 + + c/yzMEZB43Y71MHeR5Vog4mDJZpsdcdM9j8RTteEpssVlyQ29EwqMQduECAXWglG + + 2iSWgSoqgeNyR7/hfmUYFiomQSGgp/xtp0Y/AoGAaBD1rZLgjuYda9sPODCVYPLI + + /n5kh7pdXTtjyvBlYiR7ubULMg/FPEZsmd0Oh0hG9+cglLYfxVEHw4193UBquCU3 + + plJD7hUds8y8zTngXw9xSRoxtrRoYtHTK81l8t+yt2jRkay6VAeoSK+DJJYhT8M4 + + Dm3IW9kpOoqB8KgId9ECgYATNxSOoEInX5EDzb5IC13dbyxpihKklQRlZbFkH6Y+ + + CC9smrr/V/CrOJakVVLmLY9xs+A6vMz8cXE3R/PIZ9L0iC6S8kFq0J8HIYlteTwK + + I42/l8/4h3Wj6NajcxIIj5rKWcHzY59RRgerBkceCOo5tgMnph0lKXNRpp5O3mTZ + + FwKBgQDBC9od6eTL5KYL/PU0S3im4HA0Hy4530WHS5TEJVsuv0Jnc6vNayimMnGV + + jhauS2BivD4GSe2wdI0MUtGUW8XN8qf1jNBY07vzEn9Ag1k9Rd3F/K5blYU+B27W + + XZMNa+DYA2bZN0rDnX3Y6otwPRuWHS/Bnt34oORhcle8AD4kNQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:civy35latqkoitmqun3f4vlg2a:5fxqze6lzmdznzaxvpk6dmopps4ixesnjkp6m2vpjeh2l5imgpea + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAtzVd7X2GXo1jANrdYD8jCHkl1Zt7fO/TDWahvNbBHQYcm6Uv + + UI6l3ZLTW/nRLJ/ZvB9ymauAQ3cAs5C1Ok3S66YhlYqbvCmRHYbvBiKIun0nElxG + + IP5Ox0y++xM0MCWctRKi7WhidQqywivNBZglERI5L4/O1/TipcxEFedLTQY9UVl4 + + dEXrw2zYw76PMlReg88Q9jJcHQRcAJqwaRvkOTZ2qjtLnYk8tJfBEqHG44pKVzvL + + sLFFZLNgl9cCq/xHLPpCfpwpm98KR8uFfYyudX2fG7TY4i9mCS0SgcKBJiNAV6Aa + + IkQHrMs1PQJe4/ychz73SkjKRvoOreIVcESHYQIDAQABAoIBABiRSThq2/0raAKK + + FuQMa2H8PujTSf6xuUNDhz5HrQs7kdQEVWEv08mv4fRkPlrFz8CUlf1J3HAPkfJC + + Xi8ElxtfAoNnXCViDJHhUYWo1V1uoXHqmkPb3kwG/Fg2Vcn8DTTR3DPKSuOnjNuR + + XJOauKO+phj854+ZiNgTWXD3fGdGS9G8WVmGWy1yrJaL7TgjjrfSBFOAN0yyy1qO + + k6WUFy/tF74UiAT10vMnkfzMMtaAOt7BL5siGOfndpH40hM1231lf39oWp+DDxOu + + /yt7MysTvHIWB4L76k/s1XehAtEPCjrwF2ucqHlh4Dv4lCLIJTy6hbtd9VnDE/ZM + + RGSBZI0CgYEA7oQCFLKAUdcmpsmjF8Nb+CsuwhmbOLbfXdaz+gG1pfqMxf4kw7NG + + Af5Z6HgnheXRg6CX0QPv7qPe/V66Fm1WhD79Tja0OWJ742e9h+P6WoBVj92xKzVC + + +0CHh6HyQLVBfkulMVNu/EBchrKlW9V2y2ndE9Y+gl1DRQaCI1g4DrUCgYEAxKN2 + + XeI3a4oYtT53nGW0zQwALWBfVNWznjx88Ywlof31GFF8gRHgXYtiPzeN+mOjQMhG + + 6d1q/V5PJguMw+2cQIPw/+CWQA7s4dwRqk3Jc6Zr4V40Gpdn7vUnGbTAw3b7QLJR + + BW/Fp3/331v1LPbJziWvIJe51SZQOPDIUcq+lX0CgYAgiFrsTciY4RrBhyE6vYfO + + 2rz+9pUocDEZUI6t3AvVvs3yt452Lv6uiO3kencRmV4xcPckKEBSsYFZ19DT/Eff + + s+PDBk0gwqEZTG4amers6zJAdEGVHiers4qI4nrzfoWXX2QBzVqHB5RXPwi09PHG + + HwNrkD5oc6YYRSH9BixnPQKBgCPFYLj/d/l2K7x82qF21wceEcIvb+gs3/n/IvOF + + /SqU2ktMN4v7Rod93aeGYauVCJO2W0Ab6WSiDV/sZfUWeoA6AFNr9ak9jdYghI4o + + jGcfdSyQSIY12NBdhHlmqlJkiJxiU97bUGeCHgNh5R4C3v9DV7JkJ4gg6iMRmj9W + + 1Ii5AoGAUzrIstKLKfJBPXp4UP5LTglZSGCGqDj62/iBAdIZ4xz8703g/riq0h/d + + uAZipYubDV8U0WipfEhjUw2NTY74FzFRnl3Ya31Ms1gOXwuc+EagS/M+ohmb6eK3 + + HVaVQohUL//L0C+jqlxfjl6sQxUF0IizsR5XPm9VkFSJqEVYb/A= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 56 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:ihyeqq5peg2pdyw45ct5mmj4ay:2rzhndv6o4knlvo4po6rvbnknlcitasseea3mirqjor5c7quh5ra:101:256:1024 + format: + kind: chk + params: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:vwfthgrx5rep4ixdssp2psxjja:vs6adgwkfwnganksm6w42saotjlebku2jni4y23uuczi3q23i6iq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA8TipW7unNnPRZ6aycrHuDFicLcuI+QXAG9F393JiO87SnmZm + + zjI2FWGFDV3XpTb8+6QA44n9TTWiAT62b9kljU7s9Wf4dBfaJlYIrC5HIS209i19 + + tpIoQgdh31TYqXy+1o8oJDhTBD6mUJ3Lotj8oAKqUaVTKqJnfNSzPMdChYHYvE1c + + /Tr4c7gpxXMXEMTD311HtYZd3YnZ4dZryWfyrdf5/eQfrUFeY2MuPdl1ag57+2yN + + 4mXynTGHmENgG0isd2OKgyBmlHhNPq1lNsxUrQda9ht0dcwYPvLL5qNnVc2z3e5+ + + RH/2lBzIh9QTjpo+pdMxqlQR6od4jfZdrFZSDwIDAQABAoIBAFnzVaAZ+VAiXy+G + + J1wCwrCC6HZhRCoMPWeCNHinBD+mL78Wk3aHnchaTam+2TfIKg1SSmyPG9BLVCaf + + sptBv7GSgWU/yJPOAzCxe1lthmO2bhkwvIS0uuNoalRECOkm1ekfiAn9oONf01gT + + h4ip3oZyh/2bJ0iqN+oCTPY4nbM3j3Hx7Q7NI0AJ+rutEhM6Ina7RjE/VmDSmM1a + + ICGCXmae7Zg20bM8rg75BZ8Jf/td+5lvtfaEK/070X4AGPri1lAJ3vdlHjQbvJJw + + atSA9Ky1Qpe1t+rPjMBEAdUxp3bzinMGRwt/tSj3JNXKfyp6JMO5zM/dOknT4C99 + + WkM2O6UCgYEA83SKCn/lZhGBZD4thyRHRCcyVeO3GxlIO9mjt1f7JXiay3hOlqOu + + x/sT/w/Hdn+qSD8F3l+IFYP8X0hToN8oslu140qPS0RPuOyIFigm7jw++VqnZ85i + + OhZ/KuHsfnlxPmc+vS4Qh3MkDiqG3xfLVH9jUmCXDhQG5UhOMgOsgBUCgYEA/aan + + lBQA2jyoXiwnlE9P0HF6ZSbxHZaUQrw8xDuufjQcBR3mmAg7p8Yb/EOnQKTjage3 + + EDzNJnqPxtYjubxKtBu/7rjvaMkvavfH6JAN/Rl3fkibOcKbkoSa7mGmuUE6P2UR + + 6tV9vd1ITN359AE4VdUEapzanyuAjIhc8ehxLpMCgYAsMOM9tKl3NYY/I+ovta4Z + + +ONyI7uA973c30yQYy/7RUET3eql/WAkfLbMfZi/Mb0/D/GIw953yVVuFjrX4KoK + + dgs2Drqj9uphrs2k9/TZGaZ0rLfmZ9f8o0jCB/BdpL2hjiwdOtdVPtk0mROSO0d1 + + NwpYUaAZthjqVY2cFn6hYQKBgQC/hTJLML9kCSDn2lcYOLp/HO/ZqImuWaAgs5j+ + + YkHisN3nTyhp6u2ARKmk1EBZIydDTAgBjqcoQqqE6/OVroKJc9p8Gc9LQ302O1kK + + VJr7XFtJUvFBr5tgChghnkIQ5xtf+qSIuCJ1Vbvdrk2o27L5vBnVlhHM1T/+3Iex + + cFzlWQKBgQCsutY68bH2Wx5E2iiO/Eay9XQRky8HRvXAZDZSG0Bfn7dTcF5EddWk + + vhRSjEpU/6wrHcVJb1clP99uIpzgK4QG7t6mZNZ/StqCHTtyNisaungfz/B3k+li + + HMntS+IYxlYIsxBNLIPJLqNPBqAlQb9SJkoO1noTR/+4OQlSb5KNpA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:2o3r63lhfs3qvi7r54gawvyuca:cl62d7ozemosy26dkj3xuvdjrzuf554mbqyawhvi4jj53ddqrisq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAjNzgfrhm9Cs93A9LJ9yUmKkTL4JBhDUXXT/O09oWWn3wpq61 + + Ouf2NcMGwMC+1tsNWA/QQYwU66JE1s+iow3k5a2jd+Ov+pRZJa8R1HO21iIERvjF + + qJOvcxa+PBL37dZcJP+ubnhK6O3sIdgvZRy8NOM0iscXoDgJZWJnWlIIcQIVy2w7 + + 32596JhdXHH1eAd4WH5NtjCQQId5/29OPPUlo3CscH18gymseagJ1Al7ixSRnkp4 + + AnyHxk1I1aelpzRIVSJZPWrfFp1eIm3KPha2SPvcHGugGk+faTuJ7HWFHN8pLQcy + + qTXCSMjw4tsHKEbDvb7A3LCnAtTi5ovuYHt06wIDAQABAoIBAD/J7me0PfsocdTr + + oA8nFqujNSr4g47JNBFoSdMqGaFVEtuIlk1cqeRisvYq0sEdZYeRca+dLgQe8amN + + UYshSZyw6yvpkdGZyF0GUL6ywANsWB+DnI7ggj1N+UvfEyNDRWsD1gv0sYeV5q7U + + 5XGWd6xDj5Gg4xQNDEQ7Ma53I5d4vD9QgQpIHBrpTuTlz3nowkGIzXnpVQ+54Oae + + lPb8oBmLBagIHVzWY7Bh64oFh/kr6o9db/QkGIz0h1/UdMhj6HU0+kOUG/pSWHbk + + 5fRoHL7mbXgNzKZaGPOZbATzgXcha5uyWDs0r8WekKrNsUvm7E5vOE9UPdLCnM0O + + 7YHe1+ECgYEAuwDpwl+IzdAtjPNQUtsOBKuDD6/VempGKX0oyTwf4SvY8VmU0Juv + + AhHIq3UyPdJpBLY0Be0UIvbQWNXdmRDnriADLTq7g2QYDwVOI/bmRxYUI85FXjIC + + RT2u8nQWAzFfOhURsF23PUwB/rdjtBSvAdfNSletKp8abFApFonhuNMCgYEAwNXS + + BQ9nw20GeqZnYZOASnD4a+iW45coNSkSGETGO1J917xWtXzvGAAAqlSv/kNXYYqr + + RA8yWuYc9nLBx7623cpjt9CH2vXefodDLlUB4QSKEuP4f9/ttsw/L5xmJVdQ6pTL + + MNpU3XgtNl8qsOVAokOORpbY5f8leuuloylaxIkCgYAhSyRTKtccbXfupFMkrUNt + + qWuIG3ISfWFIebQNP9sdJ8VUEvLfwRgDck8b152+S/vOjvHsLC1tnCuz5T+yxMO6 + + yJBIOTCxT9zIr9UdqhONjGzBgzPudVDaKwU+vVQ99UhS+vVPRSAela21P8lMgnI2 + + DcnK9pkqAXGe3xaxoJLDaQKBgQCoASJLelKC9xfv/86OOr5JHQeyrB/aBbXoKvIy + + 5qh2wrYVIWfCEykUFdx+ie4TboRQ3Um9sCfE/js5lF20MzqLHWunmCzk3dWNEze6 + + xCEw9I1/S9MTRfuLiYN7bZ2o5tv+pMgqte2+TpfFiUBegj2/oW/xnDc4mwUChQ/4 + + iW0lUQKBgQColYu/R9ympb0+hMYMtTDrJRuREuyNCB6429vX5OG/RIxfduxCvVmI + + SASInZIbWFSqH+zt8l+L2BEi7fzpGSk3I5/9o0obRRM+9HnJD0c44P7Bg5IIsFv4 + + aIg0X4KaSZdNaLndO5ieyffsY+dEH0pSg3GRSrSn9inqiogQZB50pA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 1024 + seed: YQ== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:mvk5f2mghudk7xnknqddhvnl4m:c74myeugtix7e7l6uwybtrdtfselha2qrcc7hhbymqr6brtg4cea:101:256:4096 + format: + kind: chk + params: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:7adguvusvvbmctuzlf4g3arfv4:tkh7d36kwo7aexp5kcxl5qlhcahkaox56wgnaoz3ezeciurh5qua + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAmvahwGh2jLEIK2xDDGU7d3aleXiC23PzGCDVbngFhe61hfAG + + ViA5s4fvMo7cgz/GGc1acIPKaLiZESPViz2P1QPNNMCFvTgKkYdRzE9JWks4Vzx8 + + cv3V8x6fwgzPeuGij0y/20AosukVws+9QyAvEXleO0BtDnddPhPPfebe0JOr64BE + + 1ky8r4VE3wIMKdxigyqWvCuIrSolLDpiCaj5Puw5KwMN17+KMuyIkARse0PFGboK + + PB+n99MyxpMZZWeDesrOF56HT0Wl18AdEfqDs/M3OqSobMy4SCmc91CjkXEnw2dz + + GVMJbyutQn4/5vrLVZb/Y8I/y/gzZ6YQOCNtZwIDAQABAoIBAEPv9KIiKjcsNeSz + + pgF9MEEDpzBGATis8NqXKnsv61v4d2StAlon7qQi6F9F+q8f+n29ZfUGEmsu4wx8 + + pVZSOwisjf6emQOH2jpLFTV5XTNU3vJ/9h+D4ZSgzHGKpDu/SEGC6Gn7CtzFC2FJ + + KjSPm5MRnppjeGxrMFnS3ZjY6r6OEFe7wRVjH2wOYQqHOqPOUpqWZJ1bktz3DzkP + + tK1ZQ+rxu27kpFbxeqLohOLW3JTrgphxPAgq8VltL0Z1wC9Umd7FjKb0irkcFgNm + + 5ZtQJdHwXHuEyuYGO+zI601vw9XsBnMpl6NOv9nvhX9OFEDaft7RnU/2GuX900y0 + + dG6zWUECgYEAvB00OoqIKnXkBHRJDGlL3degn6oYZlrQOjzQpX80HBA6/hmC4yy/ + + oll+pPlppmtuHlzniAQXcUsEtoaP5F/AXXDALKn9Ebk19VZUUBKWrMBE3jcV4ULT + + AdQhzfMExZC63TNKmn9v2naKzg1HtwX9Ms0ze+jKVxLDIGWxg6fy7M8CgYEA0uLT + + G3/xSrQbhYzBk+pBIIzPAZ9HDySJfrtje+qqmO40k9dfIrA482SlPUN1m0vQvMNq + + yvuPhiX1gSvnEFbVSpNUsezIU8j3JDtzxmuTljYqURE7ZSpSXe7WYCgEAZeBQY2n + + Ncp6jYRptOn7O/E3wyVptrdY5RZc8Y4XwD+TC+kCgYBSZuiODEkBcIrleJrXGPjm + + wKHXzwbJL1avbBxpooMNF/7/d+Vh5iQ71cAoPCkPgVfHbSLu7fvm4Nm7qs41V8xI + + Ii/MYNo+fUcppRthyALAwahpPvASsNcFogr80Etyz6dLZkBz1QcGR48eG6sifTkg + + m8rFqH+aDNn0wxczeMps+QKBgHEJE47R7UvVbksPP1NBZNdFok+ESFpdgzViy9hH + + 2FlQlO4Jqvy06FHNyKQl3Iv4/1GujTdvz2ZgQk+ScK/ZW0o13lfgSyBdv9qz40Kf + + tuP09Imvat626J9gvZec20jfJHE2tEGo3jesmdxW7ksa6IC5NQizDfr9GaSAPUrW + + yMLBAoGAHI8TJFiri+YF0HonCiJvQzSb1dX4CQ8zWoLb8bgRN204Opx2jF6fmGER + + B0RkYizKEjWwpbTAaTiYvMsjOn7eClmsyj2V/03cQ7mppZbFo+TmxhunYrfiXKpe + + AiQTdpujt6/dkc7b/LlDVjZ1eNRCBy/ChJW85mfpogC794xyiWg= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:vd6qxch4fcvs2szi2saiklzoky:btq6xrsirtyy6ugjjgpaguaajd6zopupixy5e3ngo7odya3i33iq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAseah1KDj5lbm5ULH1Tkdtp2aNSeWxxYzQ7ifXjfJGDx5yh7j + + 9aGPRxmB4tmdABQUfNY58aoaYoJo/JWOV5OAq68RdGGHx3o3Pa4gjpDMdIq52biJ + + lNnAGh20TJcd8lirD7RRtEoBpzQ/mWDBKiWPxm24imUUlaRzEs4BdzjaK9mASuu+ + + etKDvoLy8ajTGtomcU4gKAwbLYoMJwsG5hGicJlnVJ53PTjfsH0egpLW6vUfglEH + + tgaNaGfPtPvj5uJMxmm1vrXUufLok1dUxHaFPHzX4j16v8FUCZWoP5QEKPASh4Vq + + 5/BnFdWuQP46C/Wbwbn0Q3F2WqwnCWVuvXe68wIDAQABAoIBAB73PaEEtlagNsWe + + N6lyLS1dxntNHk4eG6NEjhz4ydyZnjtj4Bsf2ZAvLPAfH9hlJmHKakCZ8sjF2V9p + + 6uJsjt+TdA7VcSx0Jgxq9EjMhIIeqZXvrKcHtgv1sq4IOdK2w2PS58vhe+MuUYmx + + kT30Vs/bxlz0lj4r50nVKOUnNLaf9PwSSR3SoLAARLsvjpCSjs2QjxUDcnTmDp8U + + DAffOA9lGz8Ch8m3BR561h8h0+muLAXxJ6qx0cZ0+FqXof/FWo9MFMJy41+IkO6O + + YNRRD3bPQmbegvAx/yiKiVjfo1J5Z8bEgYNM8nKX5IUbdVd3sLaobEFXX0CAOzE6 + + 6JA84cECgYEA8XRtvIkAgcp3D6bDCTymxwBX8t2ltCqYezjQif2Tfb3Nnoem5wxE + + CTJypmX0BqVYlYmb5bZ2BAi5A0ijRTwpZx9mnXB3HKmH6SX9Bnqlq8EiZMLeTYgd + + I0hHdd2P3y9vbu6MuZX2KYbXKun70Qb54lGfi7D3FWQ7e4V/IWkoYEECgYEAvJ4d + + CMDNiqQOHZXHLEJgUID3JlrIFEMrp7pc191pjg7hZ0pOoQzonGzfzkxxrtWGsA1O + + AyIxI5Wutoe/VPi4dpkM5oqNiYACUhwTCNmwoO64K95IUwyCsFJ/LXhhHVpu04GJ + + THB56kQ5HbyOoAZimlCrw2LxwOnicYQwaHrpDjMCgYANBDbKPCR/2rdSa64F+HQR + + NE6JdDNzo/w2YFi1p6rk02+bRTrVJ88fI84UdFiUZyOAZDu4RX7VNtcqeyb6G4Ur + + 3wB8KkzxiZ4fDoI2cDQwLyg4gFzVlyni9gmMLBaOdJMwSsHhW1k64d8FnDmMCjE8 + + ZyQPtsmLKK0gOpEg7vdTQQKBgQC3xtsFP05FqmkyfFAvGJFdfvrQfR17WKM9bsCt + + d0c0qd0HVghctQYj+5TpHeSac+QivyPmu7bjNCGiKYvMD/czXxaJvi//7CDWvhHx + + yqFlfJMn8xHHEWZ4xDi0JhmBjy5ymEEdoG25SzXXenQBCZejQbzJyCtDSt9euWyt + + MCzJrwKBgQDUR4StEeumfmLz6yGPxIucP6hxYBJPfS3i9dDV08rJkw+2Ubzk+oGV + + AU5NGUlSKdw/pbBRyXgICdWwB2I1NNv1qHiGoiaavK+/OmI89MiXhZ19OvrUc9P2 + + ZX+BDrxdjMWbm1uZxap0yMTAc5G3Y42M0HHFgM+fU2JZF/CDqDsW4A== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4096 + seed: Yw== + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:rvytwcc4sbmmkrdwh6b23ckv5u:klk5nqpbv37pr2qavcebcugfnikarjdefjlseo3ru5uv7guai22q:101:256:131071 + format: + kind: chk + params: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:2nkvk3zukvkwkomg7lcmwi4k2a:ulzy6ok2oaftysynb5uqactvbqa57ohasakq2qe3bd5j4jiyz5vq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEArb0j+SDFBcKDajB2eSNb95aBayyfNNwnuw/flNkdxKlwDFEd + + k3JU+xAfc3+CdmMVlugQtXFNIAADiorcu/zCs1mh0Y1nLrrQGKLdiARPkUMavbgz + + Ubv/GAl20OMER3fg87SguoHJNvkeHOSSsd3wiczXkB4H8tUZJffGe4Syoxv5CLhY + + /9H1sd/Ducqjdf26RTbFDL/jLTPjmiOroZAv7p/yF3mVaXsQPgN1TOSJs71BmFKv + + SlLHwKjiFycMNbOoEGHL8iEUzWBU0HIEVm9ISQY91kOIb7SGN/PkOPQNWjyq5yeC + + XLTL5YQ2qIy3J2CjOTUR1h5gEuK5S1+ig1j05QIDAQABAoIBAA6tC3zf58S0yaUO + + svNIqVwguo3zFv/AGRsUHC7WqE0UgwKHV5g88DDFC+MVwk99zzUQJVkuWPV7CtGJ + + KVw33bqIt8KbzzuDTFDIcS4sLwx2PqwIA03EM6g0JHVAt/vRhI8RkwIuNHEQWhrW + + tA2SUd9SDmN+Je29UoKCi6Gjc/OTJXcc8hTHIoAcoMX23pNQWDjNEKXRrXs6F7Gs + + Q2yfauPXf2cM71cZCeV9hkqedjIln0R30SdtAS7I2IeRNTsB25w/S3zE7xZryZa9 + + +Jg++rW8hlbmJpm/00iIaJWhHIxbPO7tyQIOkr4PCFMvtHLUKnzCjmL3Gsd/BW+m + + +QAZ14ECgYEA7O1dRawkbzapYPUNed54lBWtIlaC/J5vpAgnelqbxDH9BIRhxQnV + + T7Up49feR5a+2x0QSgjsg2rUxF0t6vP3BAHfe9D0zGFU6YOa4HrQ5fH2/wXx2g9T + + aOBCtwOL/C/DUc3aMD4EOHLXxismQXXWxPk/+EBtLUA0XIRLZSnuj0cCgYEAu7mU + + XH7no73Xo8IqdJbUhfKfZSsIN1klCcEnnCZEuIi77x8ZvPM8pHyrJomFew5jsvZ+ + + EPGTvd77u01/79wLgKE94s8GvYnggWE1ItScBx3A/8PnQODSdEMsr4Tdm6Qx47oZ + + 5tgM1u7kYBwao3L9aguP9dChBn6e93mOqQuYqHMCgYEAkmkgcXSuUzeRNgRZHo13 + + L/OxOP4DFf8GeHQ9iSPDDFvjwk3YaT3pXsdSKqV0jALA0IDGVynqlk+HSg1W2dGH + + PSe3Jjl7fW1MXr1gEQZ0XxTGkNPon9tGrRGgyJ3dfKs7ZSrzgUphq0x0wNZbXqpm + + XPS2LkAJ96Osd9udB9gAvvMCgYAvtyIAyLj0I8L1+tpzvArU6TCetGtoNh519kSt + + KgT5qreqNguCvYjCfnW6W+YzuxqYWJL+l4joEA+IMlC8lP/PeCyUw+6AqtUHzb+F + + 1Oi73lI6MH9NPFgB+TkYe/sgHoIX0ivXQz8wOpSN4VbcCNRk6f9zic4EKpcZbCpY + + yXvKBQKBgQDHDB8/e4ZaiWY5VQmCk1GRZmNmuyII+vC0ZynlSUP6HqXn/Std/6Ze + + EEfnVCZHEvRkNwRYAWcaY54uvqj+yeLYFeIX8vi+rs68uZ4jKI3Hz8vn7rgzPulP + + Aa6fShcdGh8xhhdl3bM62/E87ACcr97QSvUsOuhIYwr098ivyyStCw== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:jnnfwffwn6qx6qtfhvk742p6g4:gzqrivbdeczwpgkwkjna2taooajonyb3h7aijcyhv7ptaxtycroa + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAj/NZYu1pNcdeSCnt3N/BDg1jmU7jlbD1pgKaSXLAblkSAhD8 + + CE1VLCsWfNw+dbTJtvStGncEiw8gK/fQwSoQjxxP91qxD/6RpNAA7RamHol2bMiQ + + 0gtjT8H32LmS1TBYfszI3AD07+cFGAqbV+X6lobQKRK8U2eWD3x8V1pD9RHLJr6h + + nMPQ/epF1pxGf22+g7aauEEWPOStTUH3l8sf33Wg3WN2SkxDqSRyZXiETpta9Rdv + + oMjcsWHqGOTy9y94oG2B4AJHWrR1mefFN3Uu0ApfpThoUcVyI7k1XN/7y3HhEZru + + GJPaFafHjH5DZeHC6fxmJkC6vXSMLClNcfY/RQIDAQABAoIBAAmf2ddbK7hghM16 + + 3jAxFqGHpCPdKiq5OudXT7T+8t493s4cEBnG/92U4OtGt3dbt8vfdo5pLDjW8U33 + + QvITS6mh2TfezK1W1iqIjLNNWxx6ENyrmUEt6T0tKRLIr4hI8/XAX+KTvsyma8kE + + doftNLCpQVQpsEU8TQRqjI6zlo0VQo0sPKZsvSfN6IOvPciLu039H7oqHxknHRy6 + + ACQIkCvAEH2U0OY3+ABE2y7Mn4/TW1eFsh/lp++FngmGgQcMIYZUR3TnOWx1wzwl + + IiPfFo1jVAXa70Up4yHe2Nz7zjNh/VCJCTMA66MbPczOjIbUtc/GFcCvDp3qCnCj + + nRjMDOkCgYEAw1kF9qQNgFlLTagCh+uVug1hvkZVPeDUd9MXtIn2TvjbdSkHilsn + + wrKguLRSgo/OKRj2J63xhvfgb91cMxsXb1+OHG+YNU2qhFhTq4k489rHID/iVskN + + Kr2GaAMGXQb+9t/2CqHCjkur5m5VxZSIM5OgRR/nLutM1NpHWG929r0CgYEAvKUV + + yqv6gYMnolZBcC9LhB7nZ8yIBtlmYjXRHUuh1Dotx6UItlA41k6GNhFiZXL4xPbf + + F69QzvV9Wuir9iW6b7tP2JUb1gnfgB+KH1F5PoI7hriUF88VIHWFeSg1ezwIMQvd + + 9IlJhlQTk2kvADo8jwCZahVGDwsQzsf/n2xw1ykCgYBau7axYHGE8/SuFSNXzmy1 + + BhIoNrLREuSc40dXa90jwSLtwCjocn59SEquf9LzIag4Hof21iwg7HEqhD6W3jZ8 + + XH29Z3fjCjfxULVML2hsm2lx6TpP5QJgn7cWCJGkE+PI9y1ossmTHkKxvP3Jz7uT + + eTYv5SmT+WauVtRclylCYQKBgQCsBZZTlHQA+gqAXEub82TXfB7kZnx8Um6sjAq+ + + viM6Fjt83J+PMKRDuKNmVn/1ptv3MG/Ld1EnCHFhHt8AvPK/xH1RMNeLXMF0Yk5f + + tLntKHEDrvlMpMfNK52lF+d9EwcdQocJ4M8tMSoQuE/l0zU56f/73p5eRWb0SShu + + xkI30QKBgQCw8SH8qMlso796eW6V4QKOD/zdfNTrZWfAK4BaFR5l4LuX7G25xZNL + + rNe7CbDlFzzp4ukkW6kcJrxR/4RLJA6nRDR86kvzl4A4fwrGKCv1vY5y27ioQmWM + + WAEYfQ+aorfZ9lbO1+QEZc7kjXlbyt2/SiZxOqzm4CutbetMlaG7nQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131071 + seed: LCa0a2j/xo/5m0U8HTBBNBNCLXBkg7+g+YpeiGJm564= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:ocqx55dopakqnzyui6q6euz4gm:wklziyoctwrz5zjfg5wfejz4bnaagtg57fgjlspl4ba6ij6n2obq:101:256:131073 + format: + kind: chk + params: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:7u3yuuf5t6ixafggoo6rozlkca:c4vxsjiots2kqxh2xx2f7j6e2rgxtszskkvv2geby4f3flm4zcdq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAr1qCo/bz9q/oRev0Upfgc7gVB3b5/2e8jkhQ7hPyNL9xPzZF + + bih8Lbn1bX+1ZAR/cm8/Vtn58TTQTrJH66TCbkBYHryvodl2yA3gLExnfxoESpWu + + tNRF2VOab7/RMrmseicirS706Nxk99aMk0Mc0kJ/3DnEmDJUKjfq+/zjCPUmrfv0 + + 9xEiHAKHPN6EncJxQbPqWW1y7QPoEKoK/vBYusYrXa7OdDRmK6cmKWgtmNCoEvGS + + IujkkeP3lCiqrVcofGGC00VizESa0q4Iyq8Fuz1LaDHNT5HO6EYPevNjW/hy89Z/ + + NZG4tOvodZsCsGqD5XlwyIrmjxrETiS2J49oPwIDAQABAoIBAB5GtuK/i1zu/2A/ + + PraaAYeJY5wf10dZbm10oACTUhD4cwGyiadc9x/gCTeoQrXrruOfwKRqy2RxtXu4 + + /YD6uBVYJ77a3kpIJWGiP6/2WzJPWClWkc0oD41YCYS87k5fT5/hrPOQ9XlVQFuo + + YCo2/r1w/OmV0dNjcTO+5uQuRDbx75xtgYgICfHMOkFnwqJWRsNPtvq1oMA9VVrI + + zu3GyKfKQXWMrJvhmE3s+HLpv3j3whh7W5yGw5Dum8bPxh7Atc+15mYr5mC9eoQh + + Wdu1dlY7lHX2uHJgcPwhLz53jQiqlLgZ+8nw8ZNvSeKqmqeR6nhrDaUb4idQBzBI + + aWiv670CgYEA5e5J8QQuiF76HZqDkAN19yvMue8n7vckKyoHuhtTL+JOFdPkcob8 + + nb+WZkxyce9MjrRzSnXmvn1+HcY/g0+hw4qzpcQFJbyjaPREGKH2WQmYuJTHTJ5f + + owfvfSJqK4p1tNqxAtCHHWJfOA6v9ulAhHZBF+2BoZgl1xZxOrGLXAUCgYEAwzwf + + slrlisyPa04r8TfgMmwt+Pc/4g5UFC5WK66rWKMCzs8p1uLLhg39QwnrmaRxa/O1 + + t7NKEVz1uOwikxmjJZCvnUgHrYVeCp0uVfzS6s2hY/iMh+36Ocy4L1/cBXEHXbdw + + 2TAkQwNYueexeO8dvBkuXll67PQaHsSfaRxfanMCgYEAsdIDpT3SruylClgA/1Nt + + 2+YnwnROseS4OBmdODUBtLqUIRVqS5hRrb4JlrvwlmS3FHZB44gjF5b9/hDf9bGU + + LSILpVtfj7u/tN+T+mjnmBxv2/BT4dFprS/p6yC+c0X1mhS3aLHUjMkTUsspEw95 + + Mfgyh0rLQinkud9FWlsMp/ECgYB5IpnsGPfpeejWxIcBQRELWBHiMs7hXNCQQPvY + + WKUZ9vKsDN/B47Ax+gYVDVewWdbCC1HJrCWdxlb0KRd+u959VVuRM/sHkAN8hHAW + + jCr14yZrF/Fh+adTK5FwW4LxoWLXpBURvQwSxEXN+1MjXQHPDrS1d8GMuhxm0Mqz + + 9hXBvwKBgQCpF+uROS92UluZoWsjLuc0Tz5YP5ykYzXM8e5FBD9dzs8DEudMyhe6 + + vsSmuxaSPNNEAKG26wO1+774W2JFJkRLeJOpeyX5nhEl1tKxi3ACe+cMQvd2/bHA + + blKtALR2ZvXcoU6QC8XVABQ8S3h6+wMk4i1DjJ58UgHZcoHrozlBiA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:kwets5gntkkdhed4hwdsfv3ujm:ws5ltuz5fytzncl3xkfkqc2f2zrrdnxarr22rckmkoruglgyin4a + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEApvGy6mRElXz50jCzj5EW5hrMZo8fXQHgZghl+yaQ0NJoVagZ + + TOjtkuzVYnOlF/9QxOt+yAfuc+XjPn3DJGbnnIUi/8qOUI6CwQY3uUKBK8cSRMTw + + A/LihRrwM0R4Qws/QiBQhD5KmanfcMlu309Pg3enAeAVpt86I8mgMxE6f26iXgFj + + IaLFx+5el+PvPYqdOkcEDcL+HXVYDVEawzifkXGq1JtWWKnDhM3SsdmS32mTh2/6 + + RmocrD7o6LSdOhgbhNqWdOvRt/ZLZif4Mm7TqG2nHFJ8OYCkpHK4m+JpNOiKmM5W + + BFdipmKRo5jhGZWG7w8rWAqsNY6GMbcTXwgNoQIDAQABAoIBAAHqoq2Q8N4f+Qy+ + + ESOn7GHAI0JWqIskbT9yn3wYg19YWQkJtN+miWqvRBxdHEM4I8Tc+L/CYo0LUbZr + + EnFRqp1IBIC4AjX/ytW9NOjQMAQxBP9L3P8Im+vgBSurgK9xWryvOwlnnyrgMb/d + + WiPfaNfnKOBLQqhfpe7Y/tkzPI8PsPWrhXL1CZJ7o3zWjyn/l7TNvqB+i7AgcxUx + + cgIV4XxY/HKOHHDz2OsPxJk7G5/iLZbl0Toks1G28NP26rOP49UPBq1eycfnZ6Q2 + + 8oywX+ivnK2AYZle1cMynCgIOdZNE+e7eb+bB539LjUtjmDSculRFvUn5AK7TV92 + + gZfCrMkCgYEAw2cjlJhfPg2d+bMGcRPDGLEfincev2r0rbok7beEra5OqNaH1CD9 + + +ohgZd/WgrNbHsF0aC3kh+6p/kUrunbIYy6ZcAQKiQ0vnOie/TuLcPHWocxSTrLh + + xm1qt/Y2KBeSaR2MyhQVChJSWosRJYj4e/ErfCr8aLiMLRgA3dGr9SkCgYEA2rc+ + + vTulxOHBKAnlBS7A2wnfaCdyYL/Pk2/Jec4yaSd+xsYgcIuH7p2EjO6xflU1oyZk + + U7b6YvbpU/rwkJksdFiDrMrN7EPJFynYK4g0CRPl4P59Rc+gvJqDsVG2Vh2/ijeg + + 0ybnNZFz4sKyKRVqI0Wu2ewTcDuduW4i5uemK7kCgYB4rcsoq44uycQmAa3ZykW0 + + izeakYT43TptzMef1LZpeXx1A8Fxfkq9HtrCMCLQJ6r/7KRS7vz0Aq8ULW4bQ97w + + ekgjCSvkhrNAKd5/MPYmdAWFeaXfmtSbctn08WdzDVPL/YcFCrAPv08DQl39m4Ez + + MrgTgIzQtCFGfEuUsziLOQKBgQDI3+noZMMACxObEVNdKi6IPg4Im8op36Dm2ZGi + + pGWaPGLsbwVWOGB1IAigY41y6RGlMVqNpI1cnUd5EQ0m0PeKN81fwrfUGgGzm4Pl + + n2ejOrozpagqmOIYtpTjI5giiZnkeOjlZWKOyXM0vfphT0C2+oX3siG8P5TBvMyj + + Y/gzSQKBgQC15p03OtcgZJpBwQ8bEGYVLu/1YiEQS2TdIKib+XOLwUfgWzr8KHsk + + 1rv9A3s7OxBZu4MD+iA0WyhcNSzexf6wEOvada9LHQl7eRmsW5OKDJYWyh5wo6PW + + CQLCE0HGlEZeBF6vexE+oD2/9T12/x/q0ylExTmXpWlkiydG2Vw55Q== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 131073 + seed: /N4rLtula/QIYB+3If6bXDONEO5CnqBPrlURto+/j7k= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:lf6qub3bkdhfozpdis4bmorj7q:zte3u3ohbuom3iqjjx4odrjylcpw5myw4n4kwf4zcaif36vngf6q:101:256:2097151 + format: + kind: chk + params: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:m34dbj7wfsaq4efuz3viwht42u:66nxvmks4d4ebbj2c3behcobuk7w7y2i4yz43ethbflgqpgf6nha + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEA79z0LJE/B4nEn+ehBk24vaDlLdj7N9ieX2njI0PrBfe1hiPk + + YOhLDWXh+112jXJ9wLBdv5UrJxeFw4hxBADycqPSkC9BVte646lCANS47G5sHibX + + vpmVoeuIV2GBA5OnWUV/5Z57JrNim3dcqJXtifmj8HmxuHOIBWxmKdl82jf9AXcX + + kk+F588b7YRjUNPNpv4PROeLpFu6xv7RzdyZJ/ByrSCU/WpW20OKCqNmBWRp0uV2 + + HS5Ii5NCql/Cl21O0ITD+XmKefD0gz+ek0XHWkRMb394Y6igeS+ZCJadMqD7FzBE + + Jm+n4JOCmJjicPRHPFzUWRsTOTAzTDZnzy6/MwIDAQABAoIBAGuQhQlVa1QIkp34 + + 5Cus//s943h/dQ0Svdbg58ShSQyIjKVmhBx3H20XMtOkEq2U2dLm5GutS8hAkrJg + + hfn7KL6DO8KABoeYv80nUpuHyZPxYtfUqGxneIQ/2QkChzYg6WutsJC61NRCnqZE + + TU+myHrW8g89q5ahbK6t8VS0HPrIQZOuqmYiGM/seTLbsQVkppli6ZfCASMV1Wqo + + 0A3q1RiHlLY5UCMYUxdPDv1MrhkRqMZ1HScHtQuqRrpijXcfeHYQwU50CFgPs2nJ + + kk3Tm41jAFzYoBqe3E7p2R5Wlc7rbC43yalQ73JKRneS8IdAu75SWWcRH5+QASRa + + ojT2kS0CgYEA+AVYqwznAuhEp5x6w9uamy+/jwEOK1usM7MOo7PrPCu47z52t3Vb + + M9lgo8eY/PVn2jlgSMz48iZIE6fdr43xdtpxsZQZVu4bpXJ40B3YdNmob1easivx + + 4fPjZZ/OTb46veFN1GNsndyQ7IP49NkiyOStJUey3LDxJQiIP56lxJ0CgYEA95Rr + + 5S17yepS3dwkcr3H+zN7/UK1CnCzzxNKp7iTqK1YYXeOjNZb5s6qrtwAZx9GmRWi + + U3gEWTOcKaAQGPjHA+ohYU/qDpYbY+EtfHVDJqc+hMy648vyWfeyZuVghJxtSPxp + + jDJT/ACxnD6fqDzUXRtViBfaSia1VKtCipr7Ag8CgYAI7mhbAIPxHtwaDRB+rRHM + + NNP5GligRxTUZ8ZHLttxt0FZnC46PQejvlg0jaN8uHmc6iQFexwb3DUMQCdDgyEG + + 3qbpdiPTdY+ZTZ38IJcC3jOqjsULVXnIYTf3GOIc+pSy8cITu+DVbnPpkHcOmiMe + + iN2TUhmmyNhmNQBzCgt+IQKBgDO5coFC62XX6tAnOgYu2CUHMJRM533y5d4Rbbt0 + + uIS5EonqbIHIFxM1gjteA0eIJTu+ZVeC74WjXrDjm/lboFiVBbxK8d9yRO6tEM+7 + + v/fHYSxliXYmGc/qC/+rVGrgM4TYF0UPDrTLgE/gVYLUkpmRKGFyekyboa66yQAk + + OOTJAoGBAIm61KjWaZZlE5u4SwzYijI261G9M6pXbSChEjket+TOd2wHMRK5bBnx + + G0wESE41BeycrL44V4YWzJFCB2qB1efwnbNSeWkvxOsXMFok5IZxFOzKjPflcALA + + fhejJzLC8m3nOklf7hudeDOYUKDezMnrr/ZW5VFHgMAw3rqq6pF+ + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:36rzjuc6qwedeiybhkflvevttu:as44hfkawdkbcvicdc3nfynzgjtmznyihu5773wyll4rt64bbtvq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAxts3c6ig0ClkvLx4Cl5tAT6xpfuw0NrZJ2RhFFBKz/ddOw+X + + QWp6zneMjN3j/vPZzJLq3ZECGqFdsl1o3qYSAtZFDLnyh2cewAiYttv9EyZLHeIF + + hSKqa8IegYtem3pNYzp7W8K4yxv8KIq3cO837BmeDaRNUVv88sO03AWFyb+4B+z9 + + mCJsHsHrfegoXCAKKSAILPTfHB0wbLEl/zh6u06yIcSRzSSGtbcun5qoCH5AGsf6 + + wOWDJfZdJXF35tQ8RZnV8edYMmH7KeNQkpiYiP6eGN1fYtLJJak10nvy51460lm4 + + t59VbMG5UVmsgSe56xNm808p5nQJ+XvclRcCFwIDAQABAoIBAAnCOUrs6Wi9wfVR + + 1HGXJ7H0xy1g7XuaZHy+kYBjM6tYCtRlU/lrBc17EsPY9yGMYFGzRgu13DdoAtvy + + zJIx7oFYIuRYfb1FA2kjeDHFGFAnxBjv03CF/nyyS+KfRHch0zQS6ySE06JtZFGt + + rl9ARhYekwySqxQFN85xaenq6swMjTpslHpkcNKLLBuCIXbQT/351JqW90p2VYVT + + 9n9fQ5teggKaTQYcDkYR7uPMUJRDQRczLP8xU9naqOki7Q+SAnmxbWOO3jyJIoQj + + mLqWzxV4l0Yts14WYDiw7SpNVdcN7qVcfVsn60Do6ekxnJ7E/d0GbRsrN/VdksDr + + RcjJv1ECgYEA5gBkKiDf3kvZT8R55g0kTuFgEPPLVcKxR3D4QfUitioMHKTe7dRA + + xs4N/0yzgurAx5FzJtMmcWFd7ypj1+UaNgR3Q1q+8n7mdpxEp1dnN5XTEa8sEAQx + + EF4MYV9RT8xnVYzmXtWKRq3UYhYM/rYcYlRs/SYaRRvD0Kd0oZxk4ecCgYEA3VWR + + pITCHne6zQwgj3hFyUsHCk59KeCbyiBP4BKYLWaFKfSj+bgyYATvuZtSGDBJUpyZ + + cFXw0IlLTgMGqGQvAMySXH3aDK21aGglkDxpDpIBywxW767wmvA/stP/T7IPLvtp + + 7ZC85Zt6v1LmAy8/xfZ9Rvu0qilGTzlFbuQXOFECgYEAgc44uZoCHphaFe3CCjbi + + he4mZIri+AzANpyoT7lElOCYI1ZdRoZi5JCIT8x/B2Tr1fXdsky6xoR4GjGnVcJE + + D7ZnhMjjOUKrWMeK65KlezaAf9uIF6X19tHNVOsRneKzcxHpNh54Qrl6Qr1FKj+n + + N0uEkz581wH7enf3l/oG6YMCgYAfz2uGNJpdnKGZVLPdStDk1EanwY4VlbVuQGSa + + dLGwXLqoxANJIaMDz9HQYDVVSqNPHziiP4fDwOe0x5SOYQ+sUrp6VpAfIFwhLE6x + + wyzqLivZzeU0v3TPH9ZX0kYwYwvxmaqovROZAFaM5tIuBP1qazmoGQbnKdV0D2we + + OuPncQKBgFGxH9re7e6aoCSxRnPwZgD2dbI/Ddpw7qmuRc1vSrwfQ0I+eNyIQzhv + + sT/Bkw0J2SY3IjLdFgPbqkKgXX045kT5acVJFns7dQG4lh+sayiUjM9dhiG8Dhfk + + U3gbMspIoeGx+zH7RX9NwDaUP8M7oeyZKBRZV0QX85hxwv0wNF2z + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097151 + seed: uqWglk0zIPvAxqkiFARTyFE+okq4/QV3A0gEqWckgJY= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:a2qoww5xx6so5uftwg4msdtrpy:h7hwsjco5i3jkd7icytrtsuzcjvjzlnkr2wwau2tjlj5wehjrokq:101:256:2097153 + format: + kind: chk + params: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:xd45qxekarwrt6evpagw3yq6qa:56q3eead3qjwxvxxrzwwoleounmeneuw2o6mdcho2jqaghv7unra + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAw0dwdT9MuyMSXaX2etcE8p/PwUd76I0p+mTR/0uiS/L5t1Dn + + wW6xgdXqMKKw1OAdfJ8ANrgLkoTpnl8gBlalR1OKG6r/yLhVFj1qoHfIq/iDdyH+ + + O+9P7deS0Huowz6WsOkN6HQ4vG4Kswj/SxHcbWuSmffb3otKkNr8zwRdfYDcCrv5 + + 8PTE45SYFCU1x/ZFLCXb7y8pyPQ64h/M2MCNE3NvnxntkWMtxPDdc7577jPM+9Pg + + A4Yo0Oy+H65rN3x6Gpgtm9p0A9HuD++XFIs/vfAdnHBn9gdKegtUKxxlcQZuAm7L + + Oj4JpeckQj1DBcOz4V+uRnJVmjXz8GqPUjt4CwIDAQABAoIBADHXTv2t7VCqL+rV + + DCboMGwYm/cR3q9JMFinWO3XCRJnbpL6RFybexTPW1mUfJuoo/4FuxE8Qj/gSpxQ + + XSUhAkhFKy/KokRBv/3QKSHR0NcLs8o5U+FKQFVNOzyZA0bp954prZIR79UwJOzz + + M+2eHmuTFDTWDTksxhhYvEO+MnpwchZEUyUWGYwQu+bCIrGNI4SzfJhlRM7wBUy6 + + 9iZ7e+hKsj3dwZVKxXNq2m7hhxZ2h9EqfRCq2LJjFiSto+zM4crDgQslxzntHdtO + + bKn5McyWtR2FbzDhz4/uPc2E91+JMjA9jIMZ24egXs9OSejN8rQvw04DojiCKMHp + + cDjagDkCgYEA3mF3bHymDPkc9EiDkr0vx7cR0O3+Caw17vVlQ5OtMhCFLhW7f2th + + 2m6e8yZfQA0B0srQM5rPgSE+9U/HvLwSQzpZJewfOevS1hohTvUaf+9CRfRTHxKv + + nsimR7SIfi3bcHUltPDiGKkqlmLNofN2zoB1A8SqblwnLHdfRP/kQI0CgYEA4M0W + + 7FoSWO7a/26MW0ibxhxXl8sfcgzIhDQa9P353g2HDIc2AQK4//xHQ/nXEcL1jOvZ + + I3IgjqjfIjW51HIwbjEz976QceIuJKv8xw2VBk265tnE9171KdpKpv9T7oooQVBg + + kW7F8leKTXIFoFH0Ug3xe//sHEFffddg7sux8PcCgYEA2xX/B/yNwz4xzmEabxi/ + + 1+x+Ou4dVv44bGGLEFaPTUGFU+/JNzFdyEsvgbGOKZYm87sn/49HW5qbYiblSwWm + + oGD9ryS/Ztr0bkZ0BkvnfZ8EFdMtiPFp3+8iEobD6jvXcyWWrnqa5VzUPjC9Eg7A + + P5XCsqGwnuVfGqnITDwmbYkCgYAJUddacx2BnF1t64pcGnWC0Bf9jgk+tDL38CUR + + 9RmP0CXCKjTd89vxmObndYsqDFgbwIdfBdM9ttiRVYLfwOArIVUTN05LumHJWWwA + + YJrGCSDvgyW8T66ATrF7nOhA4m9qzcdDIEGKm4B7V3fOPrePU06oomKKhVdNI0m8 + + fKti3wKBgQCRlS4RDAQXu+LbCwvGfiR5LRN/UzS2TwetqoRkrE99V9LvO24aFNJN + + HEtBxhnpo29SXStmRTiV6Dsyp9LjQxFsVlSsiHN+f5SwuKKNMVxZlRAxLx5uCE/v + + O6qsKi7zb3B/eTNLSKk+KjMM5PSpfgKnb30I6hHxUWH0cKULheK4UQ== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:xo543uh52xe7gpramuim6dsxt4:5zxemp7hunykp752nywtbfgqiacrxy4qzptesaaijjlhvwshrjja + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEowIBAAKCAQEAlS1aW4nTOvDv3ObiFiccAmhSCUcQxJDTMW5o/ohlr4nofwm2 + + z9N3XJzlQ1z/O9zBUVbhPKvtqNxT7IhobM/YTzycvoutknDoNaSE3bkreh5++xhR + + F0hn0Q2he+KPY1KdxtktwTaROLl1rd/6qC1OR7VHAJF7qjhhsyTqw6aZFXjV2Eq2 + + lh2PYARfOsH2UxAY3ZP1hmXiCI5wNbsxXzhm8le07sJVQSo+kFbQ6alroy9DYQlK + + bnIaPy+WOMVzYOyZRiG5ZW6A4sNdSTAbJ/3dMf8zRumDCrrGpv+K+gsaThcaOVSJ + + jf414vtlzpih0Ot5etOhQ2UE6acx8+L2T3uTcQIDAQABAoIBACju8+9QR1zSBg9o + + bztC6gWjGHehP3Ggh8L1l+vYA4cCYYCSas5mKUeJacNtPj/v2D/4hf9+8cy3AHRU + + Dctl0OYVLLGAZFVdk+o8RZUNnWd5/L/rsTyhSpNrmRcEWPIZFmAc8dgln/2frjHS + + 1tXU8Ljufhgi03sm03AzvhOHoFPqk8WfslmsnpD36qmbGbV7AU1A0oLa5M73TkHu + + rY4u8q2vzDBRfnJ8hwkcyHzA+43uHf5uGeYieSZBxP+m0GzUChnYBkNGKmuHGqOC + + RPx5YAMfu/oECq6cRvuTLTGiHhDOi15ukh2HVwjGDZaj1qHMXXQJ/ghVcpZcDUNv + + 4H7vpI0CgYEAten7o2hbutKmuh6e/fr3TJrbD0jWajYAf0/Luo4rmF/VOskeUbiT + + OJ98NeDomiLDBAiRK1kaaxoBadMVN1lNQ5UiRW0srHWNsfQr/998+ZzlJCIWmQ0Z + + B4GOpUdRo2GwhgsWS3xIM+GS5iqTc9QyciPAMjqM1esCqkliMMhjXGsCgYEA0e5J + + uQE21G4RpV95hLpep8kBa1HwrIoFqOev8636/F+nMVR3X8RHy1Z02tEK1uXxKr0g + + 1n4KYWTURYRlvPehDunPhR6Wc3GAWOJ2gvcZSgPjKjzlaRPXDQDTGSJidd7/ClKh + + XzG0zdSFmvpA+tRSbbtGQQjSyhSvRN2Fip+JBpMCgYAD44mel6eGWeR4jBkIAupw + + d8sBC6SRxq/CCPmo9ksWSc4sIIqGYrS6/CXSnQk76kxS9L/ttkzrRzYKhhmpAj61 + + mCWQaGIRGb46tKaQJL3uNB1t5VCoWvBTCcD75YdoP7lfVDNYz8JXYZYbV4OpcTrW + + 187PBBNoq0p2S3VO56nAGwKBgQCVDZ+Cn/4SLmSRCoz5VGpIr0s2q+M6XnVOS9J+ + + LhV6g1/ugo6PjIl9MlGd27bahkEJm2dpY+xy4mhlQ3AJD7lnIVOarPEd3oTGl2SV + + 8GQgTUpJfxtT1CZosSExQ1ytXDuxVKIHOP+q9S43r1/buE0eZE2pd15S5QTc3Hwo + + xMVByQKBgFfnZcaXdyC4PtOahvs9UoV/15FtKjw9luS1zFrr+llA7aGeDRkoSUNH + + oBSvpotaM8xUaHbUN2jTY+GCZe+d4fgEqofeDE8dVqIoFfwvKsH6EHRxwhGjamlN + + HRur7hNPvC4QcDiUK+zF4jT4qnJHXo1M+7tlwbOXEMUk4E23AvDC + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 2097153 + seed: BTBX/ampNfLU+ox7xipBGiaSbgC0kcB8Gy7BkJB4oKI= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:tnevhyl46kwtokjchy7pymrdga:7w2z4jd2hfnnng4n2ziz64hi6yh4rqfodxmlpt5w5ksknlfv4xha:101:256:4194304 + format: + kind: chk + params: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:isisbwovtqib45rwg5g2mfdi7y:muylv2hhzo5wugdclu6us7ngvlbecv3uxpzrqgj3lnwsgxodz6wa + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAsPiJlX/DPcGvoJPp1ChAI6HlQO6qRMiGHZ6tqA6fto5b5yK3 + + bB2UzU+bG94CgObFMqUf479s+1VRWbSybfsRwXLx6SXVmvSHYFawC8ZRs3YIEP7i + + Fl6U1vJqtxdxOLLXUHfd4VQZuRah3fAx+ZHqpO5/pWRW9JJSGqJ83C01MIwI4WmI + + YryKu9oIJIi1bv9VkbfhMNx5fM6MSHQltm8fuBWBLzntql2eckvHUryRj/glAV9p + + VLU28bgLVMeViLmZFNVUlmjczJFSVAML7v37n7/xPQABAPpSnhlN775p5yN+cB1y + + 9JsPpL45IF7ihNe0jHQEKI+sQ5bnWdvtznWTiwIDAQABAoH/RLqS1rYjjrZ/7ZJz + + H+7cU46uYkM5jpK+hD8wRDj9KlF0Xe2ChtZh2EI2EiETIumKXLWviu6fXOcMmB3W + + xRqQAJGWZyb6X1SkCWiKqXV1qPIitNF/a+LOQRqd+ERrPHU7CiVoIusLEJYqMGXx + + 6HAMpJocCQiKGe6XOu/ke+K4UF3ZTBL4ar6yZuIYyiiGlpgNAwroDyg+hO+snyXA + + catMRT0h9oAFp0864cFTHanxjgSsbZjkyZtV2AFb1u2rjjd6E6NgUmJ+KKjK4QKR + + qIMNOzlEupAzEkh8jObtlLY+9ZAM8eRGNOa8RNimZq8ntl7Hhl9y/uw539M/Xdjf + + ejG1AoGBAMy1Vza5NKvnAFOaaORF+S1gpT7GaDfvtXjaokZbdEBDVy83KlrGDJNl + + XR5HbqZoeKGA/mbzHTWZrnZ2y2BzoGbc0aM6rtFsJ3rqabRlbmdyQFK6mjLmZGzC + + 5EMPG+pWXt95d7woxtqdbcMutz6ZtWn2uquXz4kM9R2SoWPvucKlAoGBAN1QBciq + + k+a0r4z1DEs20Yz8P1dCZdO4FnicI8Vk0IKwRXbJDYPpTwAH5ePNXlx1jDynLs7B + + 4J9csTWfhFwR5oeVzR5GWwmbx9cw6g1n+q/rpOaYqtQ+h0Jia5kXCKNcEio982kb + + CxtGDUgJj3iNi483a/wCCcKQXIIAkbxmcBZvAoGAQYA82cvFKMQPfLDJo1Eoe/aS + + qVV+/3b6ECOVDQIyXmWtvfPe35DDcV5bv1aH90MyZisKPBLKY946zrkQNlqJFqDN + + i3c5fNUohNIA5LIX843BOzduI59IvuxVcYeiHQdp8APD5jb9+fGpr2yBQcyZGcDS + + 1hkLVQUKYV4Luhh4zekCgYEA0VkjP4DsS25cKbCcIoIGk6EBod9zR2V6DDlXNSB6 + + hUWNUCI7oK6QRm0yL91TB49CSxWyl26atuUN1LXClP1x3ov77kmLUHmF/q+Ml4Xm + + g4cbA+8imYdUl51WPwik6TLtE/xqRuCIDxKi+aPhjZ4HiEBa65ZZ+Sxp9afoNBmK + + qg0CgYEAwZynW9qj3nH19nqqHPvOgGhYShotmLRznf6mmPqapQInlv+42ltxVsCB + + bKYgyM5KRZSFYVjKH5y1SFAByY32wqIZSx7Z7IbuSQNeoAt+DLlPfusuSnQRk03u + + PU4IolenY9gbyniTLxkcKjmRDQa6L9C6/ADI4FhUSTWlbcw3228= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:2vhlj3tpmx3nhv4zq65aoss3um:dh3ql3v2mlnxizs3med6mmd72dxzzgh2varaq5zgs5e5vmob6hcq + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA03uKqCbjzcK4tMQi1f7mAQl2t++ihbWQI2m12rsf312o7QOp + + td+qmKsQNGokH80lc8wdlkgGMTUtn4J869+i9uE3EDT+JhOEkRS9tPYT+sOaMoVt + + EVhioMHc55FruqXOTKv+BxkF8DFnBF6jFciQafH6RE2D8L+ASwjXOghgqLcZeIQp + + BRDe03niKh/Es8R8R+NunUd65qn0ztXTHITDBbxVUAN0Mx8rYy7cYi7drGLA56N2 + + KqY+kvWOXoDYzuzY/ILz8fQWHdNUOp2WbVWQ2MnDm0GSBUgy8y3CpWxmSifdg5mi + + nunNG1RsEWHV56N3SOCz2+zYiNaTyC2BzIOmLQIDAQABAoIBAAx4SrsS3U3YVHx8 + + MDL+vmCDRq0eg9kZ1UTxSm16U9fKNa1mu4641d3+ADecUUL6yAw66z0IRC00ndsQ + + 86gTiLrBRDZAGa2fFasEVmdMN0NgXerqs9KuVn/KI+oXngrkafSwE4t8Qz21fAXl + + mqeB1a9u5ZCPeDSC5jVbxm0VP2B98qElxzdBxYZnxxmnisYa66/ghkDgmwcmN/mV + + /r00j2ZXz/15CKd0JKNmztt2g+iXNDKtUSmJQZL78oQiYzFDL5nm0wQNM8XBBE1c + + arMSlZ9ZpOZ5NJXp33XsLbjF+cWn2oCb8fwEHkrVYP4Km4rebSCEZpx5bqQfIOrP + + +NtyF+ECgYEA61MofwHzJkeIxcKUal3aKmgD3XqDbRgn3cZfkqdG3Osm+YwO/mmu + + MBW9RzrMuBTtqxckYNta04UbsunfFiaQm3xCrmmtwxRzn+re+jp410yxeYj0fQuh + + +vRkez8LHYn2BKzfQbWgX1QdrUzoR24oJezwWQWgbkuMGq7ORqnNR2kCgYEA5hAh + + zne7xz3iChd5vzsbBmkfcT6Tp+QcQqLt9d9wEupMJ9ppOQzk4rBXwFQvjcTUOs9n + + AIo/qcB7+XAchCp3WCBdGC77Rz9hBosCjah/coNJ2PVM0CMF8VhxMbI7C7IQlKPd + + bZEmTCwQOR6kKKTD28CqWHA7NIryj5Ux2gi/NCUCgYEAx5Jy2aOxrlkkaXMnoz2M + + 9EHaZU6tfyvpQ3AlRZ6PvnO/Tgu1+5VsoGMPbwUy8TruhRbPR0VAtfpBD27AP2zd + + Xr/3XStKrhL+LDVofRZxvUXRjZzUm+ftq4LwZIWGy7pg5n4lqPh71dzkfkCnDU0i + + x2c2PolDEccIPujZD5yZ92ECgYB6+jSYATjHEDU738CckCOqEZdVGXYkULMqi51X + + yNBHzCZZR07nyBSxeEHv9RBWX9hyd1s/1qahPtsGQv97Rpf065fXzYVUWHSs4rHC + + t0cpFzTqXHVq7M3IbNZVEkitv8lNKyq53tTx8rvZTJ/Deg+X8C0eiR+cvolaZw32 + + 1qYeYQKBgQCtjRniQKjBS9A+cs7/5XOPCKfOqYOQSxlMrnto5sX/CO+PTvT2m4jn + + YTgXKQ3SerpTVqNITtghSPBPV/eVJfLDuG8c0ZzWNOjCaZ5M91rMuAgJ3ug3LupF + + XUrl6Ks6B5OzXgGqkk8SCnsaKq+3JDQdvN72xOQdaS9Gi5HhZfJ4Ww== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 4194304 + seed: 2NVWOXvtwcAFf0J/g0fDC+ypQbnCU7awZoCxcnhpkVM= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:tg5w4m6hi5ezeapuix3lrrbbtq:7kerk5plqpsd2upnole3ifxoegxdux7prazbvzeu2kyilc6idk7a:101:256:8388607 + format: + kind: chk + params: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:3y6p62da5ek5bl263mhgva45ke:hvu3gjbdhqkaauzqy7wt2aiz4t47qcqfm4h3ur34gcrxq4skwxkq + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAzclQ4Lb4GgTvkDXTIih0g1v4ys/bce595lQxSX2nNjeSbKjr + + o3hZRVJFxFCe3ylEFcsAtMflktITGzje/mWgrmn38bxYRASOBVdoLFXPiO8aCgT0 + + Excm4smNf++TQp6G3oQtey+xf4EwOtuBw8R4Ehm+CqFZrhB+qfMY726eUW4XtmZY + + zmpmM8pTWISgoZEqm1tKrV+qLfArtvrG84+VhSkzTg4u+oJKOnUINWfSPfQZd9nY + + rzNMe3K9OuM5JqYbdIVbnUS5jXFs0egNui5IwEgUtsom1nAWiljgo4o5NepXa60H + + XTFs0gpWzoZAO1A8J7JuuLN7PLzBJhk4ZwLTeQIDAQABAoIBAAmJxFiIDoeZNTfi + + UMkPZjgc9BMFb5rQJrB9dEPfYbfU+1HTQgnDhyK8CZ0L7hMypNPcQwn+Dm1f1JAh + + Uo+oyvnukjYXiGFNsz3640qTxyDmETdH676zRuOB20/D3VfcBG0NpBSGvUPHS4Kc + + 4D7ATV7sZ8czG5aib9aFfKFDZ63nNsAYWFJ0SqwwVembFkC9vOsxenPKmM5O2d8i + + 7G4wXRtzTMjhsccmQJfCoe4xAVuFCKhNlPB2LegglHfFowXcTc3LD8dninnZBfsp + + APwbb+2g/tWzj7+qn28ESxjYG84kLRvg5g1/RMgaYqLRti3vgERVnjG7Luf4hCxM + + fATU90ECgYEA2x1HqjMhSlkmjZNEjsQ8Z5sMv/+rD747IWGFumCf0PVl23WmQujC + + OW+bGHnY8A1TBKlrkW4V3HJfn3TGIaRkTRGzYsvtYGnIrgREJeNiQOkETydJq281 + + Dw8yvBquPAlruuCWucxL2lLpTJvDJYQ8WAKATXR/0XpSnynBGz9jq7kCgYEA8G2q + + 1zPbvS6Gj+7yMHNH1TiiFub3lZEevUkDGhHdFg/cROZCuMTK+DFzB4uGqZilXUw8 + + OASKuTw4lGUSNLNEkBuuZAUnnZ+LpGt7Cln1avnVwzSOK639zfYRaWMo8Rc3Yy2X + + puWu7VjHn5/GojACdeThr4xU5gkhBXv6Xy4BxcECgYBFWEXm+pmNkxtdcP8gg8Bu + + NabaWMrFh7nk/Z059/x8QD3FL723rTxSuxyFqYJbrovYjNnLQ+DNTLEwoN9XpFRO + + A80W9l0gxznIwPbkWsssqdJATrnE9MQBCRlQaM09mOmsUgnBsYNMDDNjmGQxSmFi + + pR//41/UZvchAjDoM66SmQKBgE1t5CEeUFwiya888r5rweyHKpxZkc6XR+EJzHfu + + 3NaoEPYXedFrfzpjInqBksK3qDndvV8FB3AUVtxjmHNkcGZAo+8OQe3fXed7vcpd + + ok3rW85b9JVYmW5lGsJn7t2F7o6ANmDHg4homRFtMVk2QPSa25vfg8/5jKrpfH5+ + + oI+BAoGAW8ezqR6768jFvKx1Fd9m2vTk29TF7CSHSCgjp8qBtryIQralfdDqdFSW + + 1riWoPU5uW4HWNzuQuZOCiqnwTCsc6tHxsxwgWCbtv0nliJ/VxsGQBfM7lyNHyfq + + tr4pVuZ8uXd9v2JEe6sI2muFjGmTu76ieglgamb/KlIwb61+EWQ= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:qvcv4vtu3lbnjijwf26wiojbbe:snscnddmlq6642bhlhlaqtw7actaqggvwv4gpezgjqf7sxs3kena + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEogIBAAKCAQEAq1Nn0JufzDRSFksuIYmhr4sLG2RjLhZD8Lf1E10JhSWrfb7Q + + muqmRmSv2f/2ell0cXxDtM/7OCjxrgZ92uspBZ70io/T90EjQ9D0Nxlaz+CpW9m5 + + 1qXhCdYzGjaV6M0rsOnU5lWXPFjdTz9f81VD6paPSGLJsoO7jSpu20n7DL67O66C + + OMdKof2Pr4/pN6sfOyn09VKAzOAZoP7sGrre5xJ8T4LnBYGJ6nS2wyIU8dlou0Q6 + + PqOx+7OIsDxYgaMPtA0nR3n84WpnsKGnQBkrPGqPClhfhF/7w44WU075CIvuq/Gz + + B04e7D49UlEEwOOiYG/r4NpYIHrhmulv5mOinwIDAQABAoIBADeJJdHdYINVQnav + + kBiXAK5iqAsNE4lQ9l0FhI/uTLO4bkqom/5bqeKPqOFFs6Qdcz2GRnxKHukpfI4o + + 1IsuR3HnAOYZkWBI4SGOjlt+AI36CWwYu8D0rGn/4TjSEO4R8+O5KKYxgICzXane + + pT+/l/BnNbMFMtSHFzi/VIgJBzQt54OAe2sKwCSB5JUBBgJVce0idFwqvoVv7jpe + + mxZpevJlwUjJPw8ieDOPoS7UwzEMKHkbH/iJ+mGWV3JeLH76DG6BDGIA6+oLB9X1 + + QE/JXXB54t4jybw9vIT7toC0A6lF24FoXqCzoAHX8RgJjCeNvpA0Q103FktgErp0 + + awKCMKECgYEAxO6Hy8RIK7rcmSpdPbTPOd/X9uMfJ5wuhGHgt3TFqlNYHTiQY35v + + S58Rh5v3wsDbFczg9BMbYYY//PuCoAeNI2O+iDR4El9u1T8aMRCePIm8Z5v4SFUk + + /Y7bAO2Sg9y95IF5s8EL8d5yo6S3ZZUKhZ48zfTN+oDG2fAiOa8/VUsCgYEA3ra2 + + m7VyTxDAKRjq0BqnNUrg/UStv6pHA0N+iyiHoE9F3xVHKHhBP4X0aEps9bfrErYL + + b/cQvRAS/Cb+FaMfeWTSwYzMPok5xyoUtsNwjeLwPyVp+TPdOzJVuQmj6ydaGtpD + + KuJbbNr9vjci5fduB9DFUXrv7rrcTSTJjldf130CgYAUaxLjWq+M8SvsKYtPWY7e + + 1kmjDHtvdO8RxMAy5UWVWlzZcsLtve82LQD5SX+PzsUoZnywcca1/uBlj4JEq2PD + + 1pSrtJz6crCgJZHGoo11g2Zoa7B7d3CFZalpWDiHuXxq083ViF9/rWu/cdWeD6zu + + m7B8PjSZE38Km65Awt3TLwKBgG+oWSr9sD6VnlG8bVVCV5xvWxd/TEDwhMPNHe90 + + tXKY6+XpTBCtIcFQTnXPAou61r89x8QtsRWormv+vJpqewgolUV2apvbvrzsixAK + + Mi7gnSR7hILtDrh0BuhLPgRSaWlXDh+89qs/q8Gm8Pcsstx2PccZBJvC0VpX3Dlh + + 8uodAoGAfD6xgNtZdqc876KrfiGli6IyjQgkKyVdSe41qqlxC6C1i0ICex22WveZ + + pgjbN7JwBRfLht23vnrqIVr/1P6neDQ6nh9aKNUi6wsldg6nqgwfxXx8ChAEFZRR + + RZu9RLIfWHGagPiKF0FIK07/q1PRtfAiQsSIZfo4yA4Lqojauns= + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388607 + seed: w6uP8Tcg6K2QR905Rms8iXTlksL6OD1KOWBxTK7wxPI= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:CHK:ioridipksj6o7ph3bcf37vslmi:pzhkwm4ry67ohj6dcs7zwnsjrvfqzam6tuitrns5vuo3uoomau6q:101:256:8388609 + format: + kind: chk + params: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 101 + segmentSize: 131072 + total: 256 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:SSK:366siuvcfpanoq5xpsby6aeu7m:udkk4awrzcrxtmhjldtezkscedaax4bdkaq3rczqgozdizy5hjha + format: + kind: ssk + params: + format: sdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEAl7MOMMbOn8dHhuStb5vOd3YhKX9ItY8jaFt2aUy4n6vhXSNF + + /KbIN2wQTDZdqHjMfnVIU82TIgmOzfgy3H8y5MStXKI8+zKediZVFW1SX+tVOJkr + + gHg5Yk7t/ahxXFnlNKt/hmU+Wpy65keIhZlDW3DXN8brN/abCN8gkoFHFZtl4FxW + + DhhBk08IBQdSM/m+QQJ4LuPcwlJamgRxL4f5lng2zRpnDXjtv+NMwUp/D+9hN/V9 + + 3IUy/n6+G4iJQOdZDId7PmZB5XreXgDpuOo5Qh6E5iPWEYzpOpc4441F6huwCN+7 + + hOcnbNJv7GjRdl1wVwpoIUVgI7suKk9pDDMr+QIDAQABAoIBAEGGYhbHiPCTD15A + + 4HlY/3GyYNif1jQ2Q8EL4LXTIdw2Tf4BAnYDRHBMCS4iPYpLw2jMGBW6slb9ceWd + + 07pSZxVRruBYY6bNUo0OOaorsm0kJYdxAc1YINFJ7pqma3DMk6iQe2D90lUpZcGa + + HGo4rVOOBihdj7R4nLbUSil+FcpKzuCf/7SBIlhjMeLH9rEtlDJ6az8B+UKilJJP + + nACArs0Q/l4kCyKa9tkjzqU4BGEWB77uTzxwFSBvguiELXhfYRSxTqlCkkQWR6TQ + + jgp3rkMXIDeYaowYOC7HQLClLghH7HMlYkV0lAP7sgZUmdFwGKRpUy95fxFtGI/k + + KCVE+xECgYEAzuDttHfAcTSgP6vzW7Z6QFksB+XLMUspVVQDgf4Bllg899lw3ndV + + +55dDCsljhCZw4o+y8MktgtAWLZte7znUtRLHsbD6l6DPUnDcVXdRcFzqKeqXlAZ + + ATWrti5rEqQu9l1AzduaY7eWJCtXP5mywlb+3xOdJyyYdPP7UI1SnncCgYEAu7gS + + bAJ+h675WhK9bCcBMpeCP0su80Ovz3Bu/UzUa5VW0LPnFt6AMCGlJXu2q4jFo0ba + + j2uIe1qV8SIMWS+G+XxmueqeXfptoTIeHkBYOL/1YlCONkbodHQx33UW7RVTc5MU + + HiTzjBqrL46CrtrN91sA8K7pmeuPAk9apIvs9Q8CgYEAqwmtnSHQmgefYWThW3bf + + VeojjBgBSSzR7Hj8OXHukAU9ytAcD+Fr1g7U8OWPNAgniFH4nvAkntlohq+0jrPc + + ME/SF4zPlyoyqO4eRsptmWlaHRsZsMXaFnTwFTwFTDEvnoH0vP2NhFnZKOgoRy3k + + a+YO7BHEQQoOtcqtgaiFoPsCgYEAtQN+4CBXmscjM7Q2bIAAK6Tlt9rr3zA57DJj + + FGZtv4A2QvH3uJm9yqvm8Aonz6kHy7abMwlihnCHfgpzFd06roFDHawcIktGQ9Zs + + LIenirGwEanUOIqPxRv2q5/hB6U035HIKHlBUKy2vhkR80KSsh9S/MPuBrqbIIMc + + yOcVDAkCgYA1t45yzJwsMy98fVQgJl+Cb50fWmiaDCVlytBt/n7Otxuica96EbqL + + BiDuf5yicNlAjByHeKhv7FlykLqMkxDBiCNyxwZZKErZdn9+6hV5/9zCGx7JeSJr + + uSVEoab5zdhSqEkxNJBBLo8HuGHrjRKyhLchJFMiXuo4maJ1zKu85A== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +- convergence: ZOyIygCyaOW6GjVnihtTFg== + expected: URI:MDMF:buw2ujk4pqecvd224j4tibki74:vi3aaz2qzffsyfvafcencavush7x65mrdwg6stxpqidsckfhhy4q + format: + kind: ssk + params: + format: mdmf + key: '-----BEGIN RSA PRIVATE KEY----- + + MIIEpAIBAAKCAQEA1TmUXQyj6HXUw5Q8Nh+LeL3oFFs2JcXW0qvLbUloNT9G42sR + + 3GPeGQ28QLFRzhtawf7p4hdfQSkMccba/MOwik4vZTq6kzuit0juIt75+p5j6U3P + + LUnMzjEr0cIXLOhQGwWT1aukQGzbxSndz+J8XtnehVEggmhQ2cGDnniM+Ub96FkR + + S+Z/cHWTzL7njyeYZ4MeUwWsO4F9vg/fYd/EFTsdEbqk1IV8yqnKuuYObNTCtlqW + + sJi1D2wFiFBVxi8nfRzy6Gif6B8Hf2+O1WQvmqdC/bUNl0wpouXdNRYttPH43BQs + + 5O5CTbbNgACHskcDqsdqRYuzEwLQfDgKKqnqFwIDAQABAoIBAAkyx1eBInMIubLI + + z14nNzi5lbWHGhSJN9x1dqo3D/pu7iuW9svuXPyoIRr361By9hPZqN26r2M3TVTG + + VyGvWXkczVlWiZvRsG2HTmYNbJlwHRRJss73RmyguI1IegAuvAHvjwSZN5714Pc4 + + ZhLAH0z5ErQwVh56E2yJbhiAhrGAxPjz5VecgpFtegv6gYTSN790qr4LotMkGiae + + q93EBXTxrzp58ReYOTl7OTu4a791XLtJq8ap23Lmu9s55QJ86vvBX1767WArgHcq + + 7rAf3Ti7YfHRKjw+zAK+CeLa+as4f7HD+B508QhJjhPNqQU6xdeOkuQkDX+vjq0m + + CvksTR0CgYEA9pRSPULncSkthLy1PVmNAPRfZl1iCa3Zo/UZsddWMrSS3rMKABtE + + EKyzJWzqLj00w6sQezz0YY6BJwYmHoJkDLDPHoSkxircuEgN+rJNLw7uTtOcSlX9 + + yMonaIUKw3wK5BbPmCIAv456AQw3hicqc1qWcWwBXFWvO+iyiBsxuUUCgYEA3V8I + + pRXIkxltc4LG/tytQFOPChf5fJhLlnR9UPopWK81SiViHmeT/jlvywk8thkvUuQw + + FOo1pXcidkcfvHWYWtbGgaRHmu27o30bNa1Jus1DgLq399VFvXYWQBauUOIfY/1Q + + xtxhHcPFGxSi0SYUA2px7rBb3KOhqkHEylgGlasCgYB98qbLGdhj6beRXF5q1sn6 + + Gdh8zegcr4tCfxg/yZEC109Jp0PNaB/tMHlU/XvkYGkKJN+HQ0xEZGi9yRtBbDK0 + + dL9mhDQx8ITLMCrLybU4+zRoWRg0tBWsMO3OKl6kGUDq3mfs+jlNnvXcgSP/RxQc + + 1cGQb62GP1IBlMtUUCemzQKBgQCgv+/hIS5jUyWdqaujStAsVAEczUgH5/eLq8+M + + S/xWP/SsgPT9Ky3WgBLkFzMU8Ljisn0P0vtdymMmDIPJMIOQA0JmxcqRgGyvTZvC + + oLFXitKn2e7Zcu+Pov6JT28JoQo2a66KmWGUYaLyBUwuID6MNHHDaCFs2Q3+OoAS + + h1VQvQKBgQD0DA0nokwoMxZ6ClV+B+G6NSmo6JbKOtnoqqBiM5rqw0ME3h1B26hO + + 5A41/AUKxjrFbcqE6Cm1WGQmR5vJDmKEEhF3SQXuEYm6Ji+l+awbOdYq6GvS5kCH + + pU+imOa8uwgmK2TlYYj9LaV+mRLqqIvJ6396y66IJeTlcLLoNTasXA== + + -----END RSA PRIVATE KEY----- + + ' + mutable: null + sample: + length: 8388609 + seed: yPi3JHKKbWaEEG5eZOlM6BHJll0Z3UTdBzz4bPQ7wjg= + zfec: + required: 101 + segmentSize: 131072 + total: 255 +version: 2023-01-16.2 diff --git a/integration/vectors/vectors.py b/integration/vectors/vectors.py new file mode 100644 index 000000000..a1bf9c206 --- /dev/null +++ b/integration/vectors/vectors.py @@ -0,0 +1,155 @@ +""" +A module that loads pre-generated test vectors. + +:ivar DATA_PATH: The path of the file containing test vectors. + +:ivar capabilities: The capability test vectors. +""" + +from __future__ import annotations + +from typing import TextIO +from attrs import frozen +from yaml import safe_load, safe_dump +from base64 import b64encode, b64decode + +from twisted.python.filepath import FilePath + +from .model import Param, Sample, SeedParam +from ..util import CHK, SSK + +DATA_PATH: FilePath = FilePath(__file__).sibling("test_vectors.yaml") + +# The version of the persisted test vector data this code can interpret. +CURRENT_VERSION: str = "2023-01-16.2" + +@frozen +class Case: + """ + Represent one case for which we want/have a test vector. + """ + seed_params: Param + convergence: bytes + seed_data: Sample + fmt: CHK | SSK + segment_size: int + + @property + def data(self): + return stretch(self.seed_data.seed, self.seed_data.length) + + @property + def params(self): + return self.seed_params.realize(self.fmt.max_shares) + + +def encode_bytes(b: bytes) -> str: + """ + Base64 encode some bytes to text so they are representable in JSON. + """ + return b64encode(b).decode("ascii") + + +def decode_bytes(b: str) -> bytes: + """ + Base64 decode some text to bytes. + """ + return b64decode(b.encode("ascii")) + + +def stretch(seed: bytes, size: int) -> bytes: + """ + Given a simple description of a byte string, return the byte string + itself. + """ + assert isinstance(seed, bytes) + assert isinstance(size, int) + assert size > 0 + assert len(seed) > 0 + + multiples = size // len(seed) + 1 + return (seed * multiples)[:size] + + +def save_capabilities(results: list[tuple[Case, str]], path: FilePath = DATA_PATH) -> None: + """ + Save some test vector cases and their expected values. + + This is logically the inverse of ``load_capabilities``. + """ + path.setContent(safe_dump({ + "version": CURRENT_VERSION, + "vector": [ + { + "convergence": encode_bytes(case.convergence), + "format": { + "kind": case.fmt.kind, + "params": case.fmt.to_json(), + }, + "sample": { + "seed": encode_bytes(case.seed_data.seed), + "length": case.seed_data.length, + }, + "zfec": { + "segmentSize": case.segment_size, + "required": case.params.required, + "total": case.params.total, + }, + "expected": cap, + } + for (case, cap) + in results + ], + }).encode("ascii")) + + +def load_format(serialized: dict) -> CHK | SSK: + """ + Load an encrypted object format from a simple description of it. + + :param serialized: A ``dict`` describing either CHK or SSK, possibly with + some parameters. + """ + if serialized["kind"] == "chk": + return CHK.load(serialized["params"]) + elif serialized["kind"] == "ssk": + return SSK.load(serialized["params"]) + else: + raise ValueError(f"Unrecognized format: {serialized}") + + +def load_capabilities(f: TextIO) -> dict[Case, str]: + """ + Load some test vector cases and their expected results from the given + file. + + This is logically the inverse of ``save_capabilities``. + """ + data = safe_load(f) + if data is None: + return {} + if data["version"] != CURRENT_VERSION: + print( + f"Current version is {CURRENT_VERSION}; " + f"cannot load version {data['version']} data." + ) + return {} + + return { + Case( + seed_params=SeedParam(case["zfec"]["required"], case["zfec"]["total"]), + segment_size=case["zfec"]["segmentSize"], + convergence=decode_bytes(case["convergence"]), + seed_data=Sample(decode_bytes(case["sample"]["seed"]), case["sample"]["length"]), + fmt=load_format(case["format"]), + ): case["expected"] + for case + in data["vector"] + } + + +try: + with DATA_PATH.open() as f: + capabilities: dict[Case, str] = load_capabilities(f) +except FileNotFoundError: + capabilities = {} diff --git a/misc/windows-enospc/passthrough.py b/misc/windows-enospc/passthrough.py new file mode 100644 index 000000000..1d4cd48bb --- /dev/null +++ b/misc/windows-enospc/passthrough.py @@ -0,0 +1,36 @@ +""" +Writing to non-blocking pipe can result in ENOSPC when using Unix APIs on +Windows. So, this program passes through data from stdin to stdout, using +Windows APIs instead of Unix-y APIs. +""" + +from twisted.internet.stdio import StandardIO +from twisted.internet import reactor +from twisted.internet.protocol import Protocol +from twisted.internet.interfaces import IHalfCloseableProtocol +from twisted.internet.error import ReactorNotRunning +from zope.interface import implementer + +@implementer(IHalfCloseableProtocol) +class Passthrough(Protocol): + def readConnectionLost(self): + self.transport.loseConnection() + + def writeConnectionLost(self): + try: + reactor.stop() + except ReactorNotRunning: + pass + + def dataReceived(self, data): + self.transport.write(data) + + def connectionLost(self, reason): + try: + reactor.stop() + except ReactorNotRunning: + pass + + +std = StandardIO(Passthrough()) +reactor.run() diff --git a/mypy.ini b/mypy.ini index 01cbb57a8..e6e7d16ff 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,3 +1,10 @@ [mypy] ignore_missing_imports = True plugins=mypy_zope:plugin +show_column_numbers = True +pretty = True +show_error_codes = True +warn_unused_configs =True +no_implicit_optional = True +warn_redundant_casts = True +strict_equality = True \ No newline at end of file diff --git a/newsfragments/3783.minor b/newsfragments/3783.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3870.minor b/newsfragments/3870.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3874.minor b/newsfragments/3874.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3914.minor b/newsfragments/3914.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3921.feature b/newsfragments/3921.feature new file mode 100644 index 000000000..798aee817 --- /dev/null +++ b/newsfragments/3921.feature @@ -0,0 +1,5 @@ +`tahoe run ...` will now exit when its stdin is closed. + +This facilitates subprocess management, specifically cleanup. +When a parent process is running tahoe and exits without time to do "proper" cleanup at least the stdin descriptor will be closed. +Subsequently "tahoe run" notices this and exits. \ No newline at end of file diff --git a/newsfragments/3922.documentation b/newsfragments/3922.documentation new file mode 100644 index 000000000..d0232dd02 --- /dev/null +++ b/newsfragments/3922.documentation @@ -0,0 +1 @@ +Several minor errors in the Great Black Swamp proposed specification document have been fixed. \ No newline at end of file diff --git a/newsfragments/3927.minor b/newsfragments/3927.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3937.minor b/newsfragments/3937.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3938.bugfix b/newsfragments/3938.bugfix new file mode 100644 index 000000000..c2778cfdf --- /dev/null +++ b/newsfragments/3938.bugfix @@ -0,0 +1 @@ +Work with (and require) newer versions of pycddl. \ No newline at end of file diff --git a/newsfragments/3939.bugfix b/newsfragments/3939.bugfix new file mode 100644 index 000000000..9d2071d32 --- /dev/null +++ b/newsfragments/3939.bugfix @@ -0,0 +1 @@ +Uploading immutables will now better use available bandwidth, which should allow for faster uploads in many cases. \ No newline at end of file diff --git a/newsfragments/3940.minor b/newsfragments/3940.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3942.minor b/newsfragments/3942.minor new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/newsfragments/3942.minor @@ -0,0 +1 @@ + diff --git a/newsfragments/3944.minor b/newsfragments/3944.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3947.minor b/newsfragments/3947.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3950.minor b/newsfragments/3950.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3952.minor b/newsfragments/3952.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3953.minor b/newsfragments/3953.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3954.minor b/newsfragments/3954.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3956.minor b/newsfragments/3956.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3958.minor b/newsfragments/3958.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3960.minor b/newsfragments/3960.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3961.other b/newsfragments/3961.other new file mode 100644 index 000000000..1b8085b30 --- /dev/null +++ b/newsfragments/3961.other @@ -0,0 +1 @@ +The integration test suite now includes a set of capability test vectors (``integration/vectors/test_vectors.yaml``) which can be used to verify compatibility between Tahoe-LAFS and other implementations. diff --git a/newsfragments/3962.feature b/newsfragments/3962.feature new file mode 100644 index 000000000..86cf62781 --- /dev/null +++ b/newsfragments/3962.feature @@ -0,0 +1 @@ +Mutable objects can now be created with a pre-determined "signature key" using the ``tahoe put`` CLI or the HTTP API. This enables deterministic creation of mutable capabilities. This feature must be used with care to preserve the normal security and reliability properties. \ No newline at end of file diff --git a/newsfragments/3964.removed b/newsfragments/3964.removed new file mode 100644 index 000000000..d022f94af --- /dev/null +++ b/newsfragments/3964.removed @@ -0,0 +1 @@ +Python 3.7 is no longer supported, and Debian 10 and Ubuntu 18.04 are no longer tested. \ No newline at end of file diff --git a/newsfragments/3966.bugfix b/newsfragments/3966.bugfix new file mode 100644 index 000000000..384dcf797 --- /dev/null +++ b/newsfragments/3966.bugfix @@ -0,0 +1 @@ +Fix incompatibility with transitive dependency charset_normalizer >= 3 when using PyInstaller. diff --git a/newsfragments/3967.minor b/newsfragments/3967.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3969.minor b/newsfragments/3969.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3971.minor b/newsfragments/3971.minor new file mode 100644 index 000000000..a6cbb6a89 --- /dev/null +++ b/newsfragments/3971.minor @@ -0,0 +1 @@ +Changes made to mypy.ini to make mypy more 'strict' and prevent future regressions. \ No newline at end of file diff --git a/newsfragments/3974.minor b/newsfragments/3974.minor new file mode 100644 index 000000000..e69de29bb diff --git a/newsfragments/3975.minor b/newsfragments/3975.minor new file mode 100644 index 000000000..08fba6dd6 --- /dev/null +++ b/newsfragments/3975.minor @@ -0,0 +1 @@ +Fixes truthy conditional in status.py \ No newline at end of file diff --git a/newsfragments/3976.minor b/newsfragments/3976.minor new file mode 100644 index 000000000..4d6245e73 --- /dev/null +++ b/newsfragments/3976.minor @@ -0,0 +1 @@ +Fixes variable name same as built-in type. \ No newline at end of file diff --git a/nix/sources.json b/nix/sources.json index 79eabe7a1..18aa18e3f 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -1,14 +1,14 @@ { "mach-nix": { - "branch": "master", + "branch": "switch-to-nix-pypi-fetcher-2", "description": "Create highly reproducible python environments", "homepage": "", - "owner": "davhau", + "owner": "PrivateStorageio", "repo": "mach-nix", - "rev": "bdc97ba6b2ecd045a467b008cff4ae337b6a7a6b", - "sha256": "12b3jc0g0ak6s93g3ifvdpwxbyqx276k1kl66bpwz8a67qjbcbwf", + "rev": "f6d1a1841d8778c199326f95d0703c16bee2f8c4", + "sha256": "0krc4yhnpbzc4yhja9frnmym2vqm5zyacjnqb3fq9z9gav8vs9ls", "type": "tarball", - "url": "https://github.com/davhau/mach-nix/archive/bdc97ba6b2ecd045a467b008cff4ae337b6a7a6b.tar.gz", + "url": "https://github.com/PrivateStorageio/mach-nix/archive/f6d1a1841d8778c199326f95d0703c16bee2f8c4.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, "niv": { @@ -53,10 +53,10 @@ "homepage": "", "owner": "DavHau", "repo": "pypi-deps-db", - "rev": "76b8f1e44a8ec051b853494bcf3cc8453a294a6a", - "sha256": "18fgqyh4z578jjhk26n1xi2cw2l98vrqp962rgz9a6wa5yh1nm4x", + "rev": "5440c9c76f6431f300fb6a1ecae762a5444de5f6", + "sha256": "08r3iiaxzw9v2gq15y1m9bwajshyyz9280g6aia7mkgnjs9hnd1n", "type": "tarball", - "url": "https://github.com/DavHau/pypi-deps-db/archive/76b8f1e44a8ec051b853494bcf3cc8453a294a6a.tar.gz", + "url": "https://github.com/DavHau/pypi-deps-db/archive/5440c9c76f6431f300fb6a1ecae762a5444de5f6.tar.gz", "url_template": "https://github.com///archive/.tar.gz" } } diff --git a/pyinstaller.spec b/pyinstaller.spec index eece50757..01b1ac4ac 100644 --- a/pyinstaller.spec +++ b/pyinstaller.spec @@ -36,6 +36,7 @@ hidden_imports = [ 'allmydata.stats', 'base64', 'cffi', + 'charset_normalizer.md__mypyc', 'collections', 'commands', 'Crypto', diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 000000000..9ff725e7b --- /dev/null +++ b/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +markers = + slow: marks tests as slow (not run by default; run them with '--runslow') diff --git a/relnotes.txt b/relnotes.txt index e9b298771..dd7cc9429 100644 --- a/relnotes.txt +++ b/relnotes.txt @@ -1,6 +1,6 @@ -ANNOUNCING Tahoe, the Least-Authority File Store, v1.17.1 +ANNOUNCING Tahoe, the Least-Authority File Store, v1.18.0 -The Tahoe-LAFS team is pleased to announce version 1.17.1 of +The Tahoe-LAFS team is pleased to announce version 1.18.0 of Tahoe-LAFS, an extremely reliable decentralized storage system. Get it with "pip install tahoe-lafs", or download a tarball here: @@ -15,10 +15,12 @@ unique security and fault-tolerance properties: https://tahoe-lafs.readthedocs.org/en/latest/about.html -The previous stable release of Tahoe-LAFS was v1.17.0, released on -December 6, 2021. +The previous stable release of Tahoe-LAFS was v1.17.1, released on +January 7, 2022. -This release fixes two Python3-releated regressions and 4 minor bugs. +This release drops support for Python 2 and for Python 3.6 and earlier. +twistd.pid is no longer used (in favour of one with pid + process creation time). +A collection of minor bugs and issues were also fixed. Please see ``NEWS.rst`` [1] for a complete list of changes. @@ -132,24 +134,23 @@ Of Fame" [13]. ACKNOWLEDGEMENTS -This is the nineteenth release of Tahoe-LAFS to be created -solely as a labor of love by volunteers. Thank you very much -to the team of "hackers in the public interest" who make -Tahoe-LAFS possible. +This is the twentieth release of Tahoe-LAFS to be created solely as a +labor of love by volunteers. Thank you very much to the team of +"hackers in the public interest" who make Tahoe-LAFS possible. meejah on behalf of the Tahoe-LAFS team -January 7, 2022 +October 1, 2022 Planet Earth -[1] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.17.1/NEWS.rst +[1] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.18.0/NEWS.rst [2] https://github.com/tahoe-lafs/tahoe-lafs/blob/master/docs/known_issues.rst [3] https://tahoe-lafs.org/trac/tahoe-lafs/wiki/RelatedProjects -[4] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.17.1/COPYING.GPL -[5] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.17.1/COPYING.TGPPL.rst -[6] https://tahoe-lafs.readthedocs.org/en/tahoe-lafs-1.17.1/INSTALL.html +[4] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.18.0/COPYING.GPL +[5] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.18.0/COPYING.TGPPL.rst +[6] https://tahoe-lafs.readthedocs.org/en/tahoe-lafs-1.18.0/INSTALL.html [7] https://lists.tahoe-lafs.org/mailman/listinfo/tahoe-dev [8] https://tahoe-lafs.org/trac/tahoe-lafs/roadmap [9] https://github.com/tahoe-lafs/tahoe-lafs/blob/master/CREDITS diff --git a/setup.py b/setup.py index 0e14f0864..5a99447ad 100644 --- a/setup.py +++ b/setup.py @@ -96,7 +96,9 @@ install_requires = [ # an sftp extra in Tahoe-LAFS, there is no point in having one. # * Twisted 19.10 introduces Site.getContentFile which we use to get # temporary upload files placed into a per-node temporary directory. - "Twisted[tls,conch] >= 19.10.0", + # * Twisted 22.8.0 added support for coroutine-returning functions in many + # places (mainly via `maybeDeferred`) + "Twisted[tls,conch] >= 22.8.0", "PyYAML >= 3.11", @@ -137,7 +139,10 @@ install_requires = [ "werkzeug != 2.2.0", "treq", "cbor2", - "pycddl", + + # 0.4 adds the ability to pass in mmap() values which greatly reduces the + # amount of copying involved. + "pycddl >= 0.4", # Command-line parsing "click >= 7.0", @@ -224,7 +229,7 @@ def run_command(args, cwd=None): use_shell = sys.platform == "win32" try: p = subprocess.Popen(args, stdout=subprocess.PIPE, cwd=cwd, shell=use_shell) - except EnvironmentError as e: # if this gives a SyntaxError, note that Tahoe-LAFS requires Python 3.7+ + except EnvironmentError as e: # if this gives a SyntaxError, note that Tahoe-LAFS requires Python 3.8+ print("Warning: unable to run %r." % (" ".join(args),)) print(e) return None @@ -375,8 +380,8 @@ setup(name="tahoe-lafs", # also set in __init__.py package_dir = {'':'src'}, packages=find_packages('src') + ['allmydata.test.plugins'], classifiers=trove_classifiers, - # We support Python 3.7 or later. 3.11 is not supported yet. - python_requires=">=3.7, <3.11", + # We support Python 3.8 or later. 3.11 is not supported yet. + python_requires=">=3.8, <3.11", install_requires=install_requires, extras_require={ # Duplicate the Twisted pywin32 dependency here. See @@ -389,9 +394,6 @@ setup(name="tahoe-lafs", # also set in __init__.py ], "test": [ "flake8", - # On Python 3.7, importlib_metadata v5 breaks flake8. - # https://github.com/python/importlib_metadata/issues/407 - "importlib_metadata<5; python_version < '3.8'", # Pin a specific pyflakes so we don't have different folks # disagreeing on what is or is not a lint issue. We can bump # this version from time to time, but we will do it @@ -399,7 +401,7 @@ setup(name="tahoe-lafs", # also set in __init__.py "pyflakes == 2.2.0", "coverage ~= 5.0", "mock", - "tox", + "tox ~= 3.0", "pytest", "pytest-twisted", "hypothesis >= 3.6.1", diff --git a/src/allmydata/client.py b/src/allmydata/client.py index 28f165aa2..2eee9ef9c 100644 --- a/src/allmydata/client.py +++ b/src/allmydata/client.py @@ -36,6 +36,7 @@ from allmydata.storage.server import StorageServer, FoolscapStorageServer from allmydata import storage_client from allmydata.immutable.upload import Uploader from allmydata.immutable.offloaded import Helper +from allmydata.mutable.filenode import MutableFileNode from allmydata.introducer.client import IntroducerClient from allmydata.util import ( hashutil, base32, pollmixin, log, idlib, @@ -110,6 +111,7 @@ _client_config = configutil.ValidConfiguration( "storage_dir", "plugins", "grid_management", + "force_foolscap", ), "sftpd": ( "accounts.file", @@ -832,9 +834,10 @@ class _Client(node.Node, pollmixin.PollMixin): furl_file = self.config.get_private_path("storage.furl").encode(get_filesystem_encoding()) furl = self.tub.registerReference(FoolscapStorageServer(ss), furlFile=furl_file) (_, _, swissnum) = decode_furl(furl) - self.storage_nurls = self.tub.negotiationClass.add_storage_server( - ss, swissnum.encode("ascii") - ) + if hasattr(self.tub.negotiationClass, "add_storage_server"): + nurls = self.tub.negotiationClass.add_storage_server(ss, swissnum.encode("ascii")) + self.storage_nurls = nurls + announcement[storage_client.ANONYMOUS_STORAGE_NURLS] = [n.to_text() for n in nurls] announcement["anonymous-storage-FURL"] = furl enabled_storage_servers = self._enable_storage_servers( @@ -1103,9 +1106,40 @@ class _Client(node.Node, pollmixin.PollMixin): def create_immutable_dirnode(self, children, convergence=None): return self.nodemaker.create_immutable_directory(children, convergence) - def create_mutable_file(self, contents=None, version=None): + def create_mutable_file( + self, + contents: bytes | None = None, + version: int | None = None, + *, + unique_keypair: tuple[rsa.PublicKey, rsa.PrivateKey] | None = None, + ) -> MutableFileNode: + """ + Create *and upload* a new mutable object. + + :param contents: If given, the initial contents for the new object. + + :param version: If given, the mutable file format for the new object + (otherwise a format will be chosen automatically). + + :param unique_keypair: **Warning** This value independently determines + the identity of the mutable object to create. There cannot be two + different mutable objects that share a keypair. They will merge + into one object (with undefined contents). + + It is common to pass a None value (or not pass a valuye) for this + parameter. In these cases, a new random keypair will be + generated. + + If non-None, the given public/private keypair will be used for the + new object. The expected use-case is for implementing compliance + tests. + + :return: A Deferred which will fire with a representation of the new + mutable object after it has been uploaded. + """ return self.nodemaker.create_mutable_file(contents, - version=version) + version=version, + keypair=unique_keypair) def upload(self, uploadable, reactor=None): uploader = self.getServiceNamed("uploader") diff --git a/src/allmydata/crypto/rsa.py b/src/allmydata/crypto/rsa.py index 95cf01413..e579a3d2a 100644 --- a/src/allmydata/crypto/rsa.py +++ b/src/allmydata/crypto/rsa.py @@ -9,17 +9,14 @@ features of any objects that `cryptography` documents. That is, the public and private keys are opaque objects; DO NOT depend on any of their methods. - -Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from future.utils import PY2 -if PY2: - from builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations + +from typing_extensions import TypeAlias +from typing import Callable + +from functools import partial from cryptography.exceptions import InvalidSignature from cryptography.hazmat.backends import default_backend @@ -30,6 +27,8 @@ from cryptography.hazmat.primitives.serialization import load_der_private_key, l from allmydata.crypto.error import BadSignature +PublicKey: TypeAlias = rsa.RSAPublicKey +PrivateKey: TypeAlias = rsa.RSAPrivateKey # This is the value that was used by `pycryptopp`, and we must continue to use it for # both backwards compatibility and interoperability. @@ -46,12 +45,12 @@ RSA_PADDING = padding.PSS( -def create_signing_keypair(key_size): +def create_signing_keypair(key_size: int) -> tuple[PrivateKey, PublicKey]: """ Create a new RSA signing (private) keypair from scratch. Can be used with `sign_data` function. - :param int key_size: length of key in bits + :param key_size: length of key in bits :returns: 2-tuple of (private_key, public_key) """ @@ -63,32 +62,62 @@ def create_signing_keypair(key_size): return priv_key, priv_key.public_key() -def create_signing_keypair_from_string(private_key_der): +def create_signing_keypair_from_string(private_key_der: bytes) -> tuple[PrivateKey, PublicKey]: """ Create an RSA signing (private) key from previously serialized private key bytes. - :param bytes private_key_der: blob as returned from `der_string_from_signing_keypair` + :param private_key_der: blob as returned from `der_string_from_signing_keypair` :returns: 2-tuple of (private_key, public_key) """ - priv_key = load_der_private_key( + _load = partial( + load_der_private_key, private_key_der, password=None, backend=default_backend(), ) - if not isinstance(priv_key, rsa.RSAPrivateKey): + + def load_with_validation() -> PrivateKey: + k = _load() + assert isinstance(k, PrivateKey) + return k + + def load_without_validation() -> PrivateKey: + k = _load(unsafe_skip_rsa_key_validation=True) + assert isinstance(k, PrivateKey) + return k + + # Load it once without the potentially expensive OpenSSL validation + # checks. These have superlinear complexity. We *will* run them just + # below - but first we'll apply our own constant-time checks. + load: Callable[[], PrivateKey] = load_without_validation + try: + unsafe_priv_key = load() + except TypeError: + # cryptography<39 does not support this parameter, so just load the + # key with validation... + unsafe_priv_key = load_with_validation() + # But avoid *reloading* it since that will run the expensive + # validation *again*. + load = lambda: unsafe_priv_key + + if not isinstance(unsafe_priv_key, rsa.RSAPrivateKey): raise ValueError( "Private Key did not decode to an RSA key" ) - if priv_key.key_size != 2048: + if unsafe_priv_key.key_size != 2048: raise ValueError( "Private Key must be 2048 bits" ) - return priv_key, priv_key.public_key() + + # Now re-load it with OpenSSL's validation applied. + safe_priv_key = load() + + return safe_priv_key, safe_priv_key.public_key() -def der_string_from_signing_key(private_key): +def der_string_from_signing_key(private_key: PrivateKey) -> bytes: """ Serializes a given RSA private key to a DER string @@ -98,14 +127,14 @@ def der_string_from_signing_key(private_key): :returns: bytes representing `private_key` """ _validate_private_key(private_key) - return private_key.private_bytes( + return private_key.private_bytes( # type: ignore[attr-defined] encoding=Encoding.DER, format=PrivateFormat.PKCS8, encryption_algorithm=NoEncryption(), ) -def der_string_from_verifying_key(public_key): +def der_string_from_verifying_key(public_key: PublicKey) -> bytes: """ Serializes a given RSA public key to a DER string. @@ -121,7 +150,7 @@ def der_string_from_verifying_key(public_key): ) -def create_verifying_key_from_string(public_key_der): +def create_verifying_key_from_string(public_key_der: bytes) -> PublicKey: """ Create an RSA verifying key from a previously serialized public key @@ -134,15 +163,16 @@ def create_verifying_key_from_string(public_key_der): public_key_der, backend=default_backend(), ) + assert isinstance(pub_key, PublicKey) return pub_key -def sign_data(private_key, data): +def sign_data(private_key: PrivateKey, data: bytes) -> bytes: """ :param private_key: the private part of a keypair returned from `create_signing_keypair_from_string` or `create_signing_keypair` - :param bytes data: the bytes to sign + :param data: the bytes to sign :returns: bytes which are a signature of the bytes given as `data`. """ @@ -153,7 +183,7 @@ def sign_data(private_key, data): hashes.SHA256(), ) -def verify_signature(public_key, alleged_signature, data): +def verify_signature(public_key: PublicKey, alleged_signature: bytes, data: bytes) -> None: """ :param public_key: a verifying key, returned from `create_verifying_key_from_string` or `create_verifying_key_from_private_key` @@ -173,23 +203,23 @@ def verify_signature(public_key, alleged_signature, data): raise BadSignature() -def _validate_public_key(public_key): +def _validate_public_key(public_key: PublicKey) -> None: """ Internal helper. Checks that `public_key` is a valid cryptography object """ if not isinstance(public_key, rsa.RSAPublicKey): raise ValueError( - "public_key must be an RSAPublicKey" + f"public_key must be an RSAPublicKey not {type(public_key)}" ) -def _validate_private_key(private_key): +def _validate_private_key(private_key: PrivateKey) -> None: """ Internal helper. Checks that `public_key` is a valid cryptography object """ if not isinstance(private_key, rsa.RSAPrivateKey): raise ValueError( - "private_key must be an RSAPrivateKey" + f"private_key must be an RSAPrivateKey not {type(private_key)}" ) diff --git a/src/allmydata/history.py b/src/allmydata/history.py index b5cfb7318..06a22ab5d 100644 --- a/src/allmydata/history.py +++ b/src/allmydata/history.py @@ -20,7 +20,7 @@ class History(object): MAX_UPLOAD_STATUSES = 10 MAX_MAPUPDATE_STATUSES = 20 MAX_PUBLISH_STATUSES = 20 - MAX_RETRIEVE_STATUSES = 20 + MAX_RETRIEVE_STATUSES = 40 def __init__(self, stats_provider=None): self.stats_provider = stats_provider diff --git a/src/allmydata/immutable/encode.py b/src/allmydata/immutable/encode.py index 874492785..2414527ff 100644 --- a/src/allmydata/immutable/encode.py +++ b/src/allmydata/immutable/encode.py @@ -262,6 +262,8 @@ class Encoder(object): d.addCallback(lambda res: self.finish_hashing()) + # These calls have to happen in order; layout.py now requires writes to + # be appended to the data written so far. d.addCallback(lambda res: self.send_crypttext_hash_tree_to_all_shareholders()) d.addCallback(lambda res: self.send_all_block_hash_trees()) diff --git a/src/allmydata/immutable/layout.py b/src/allmydata/immutable/layout.py index d552d43c4..9154f2f30 100644 --- a/src/allmydata/immutable/layout.py +++ b/src/allmydata/immutable/layout.py @@ -1,21 +1,18 @@ """ Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations import struct +from io import BytesIO + +from attrs import define, field from zope.interface import implementer from twisted.internet import defer from allmydata.interfaces import IStorageBucketWriter, IStorageBucketReader, \ FileTooLargeError, HASH_SIZE -from allmydata.util import mathutil, observer, pipeline, log +from allmydata.util import mathutil, observer, log from allmydata.util.assertutil import precondition from allmydata.storage.server import si_b2a @@ -107,19 +104,58 @@ def make_write_bucket_proxy(rref, server, num_share_hashes, uri_extension_size) return wbp + +@define +class _WriteBuffer: + """ + Queue up small writes to be written in a single batched larger write. + """ + _batch_size: int + _to_write : BytesIO = field(factory=BytesIO) + _written_bytes : int = field(default=0) + + def queue_write(self, data: bytes) -> bool: + """ + Queue a write. If the result is ``False``, no further action is needed + for now. If the result is some ``True``, it's time to call ``flush()`` + and do a real write. + """ + self._to_write.write(data) + return self.get_queued_bytes() >= self._batch_size + + def flush(self) -> tuple[int, bytes]: + """Return offset and data to be written.""" + offset = self._written_bytes + data = self._to_write.getvalue() + self._written_bytes += len(data) + self._to_write = BytesIO() + return (offset, data) + + def get_queued_bytes(self) -> int: + """Return number of queued, unwritten bytes.""" + return self._to_write.tell() + + def get_total_bytes(self) -> int: + """Return how many bytes were written or queued in total.""" + return self._written_bytes + self.get_queued_bytes() + + @implementer(IStorageBucketWriter) class WriteBucketProxy(object): + """ + Note: The various ``put_`` methods need to be called in the order in which the + bytes will get written. + """ fieldsize = 4 fieldstruct = ">L" def __init__(self, rref, server, data_size, block_size, num_segments, - num_share_hashes, uri_extension_size, pipeline_size=50000): + num_share_hashes, uri_extension_size, batch_size=1_000_000): self._rref = rref self._server = server self._data_size = data_size self._block_size = block_size self._num_segments = num_segments - self._written_bytes = 0 effective_segments = mathutil.next_power_of_k(num_segments,2) self._segment_hash_size = (2*effective_segments - 1) * HASH_SIZE @@ -130,11 +166,13 @@ class WriteBucketProxy(object): self._create_offsets(block_size, data_size) - # k=3, max_segment_size=128KiB gives us a typical segment of 43691 - # bytes. Setting the default pipeline_size to 50KB lets us get two - # segments onto the wire but not a third, which would keep the pipe - # filled. - self._pipeline = pipeline.Pipeline(pipeline_size) + # With a ~1MB batch size, max upload speed is 1MB/(round-trip latency) + # assuming the writing code waits for writes to finish, so 20MB/sec if + # latency is 50ms. In the US many people only have 1MB/sec upload speed + # as of 2022 (standard Comcast). For further discussion of how one + # might set batch sizes see + # https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3787#comment:1. + self._write_buffer = _WriteBuffer(batch_size) def get_allocated_size(self): return (self._offsets['uri_extension'] + self.fieldsize + @@ -179,7 +217,7 @@ class WriteBucketProxy(object): return "" % self._server.get_name() def put_header(self): - return self._write(0, self._offset_data) + return self._queue_write(0, self._offset_data) def put_block(self, segmentnum, data): offset = self._offsets['data'] + segmentnum * self._block_size @@ -193,13 +231,13 @@ class WriteBucketProxy(object): (self._block_size * (self._num_segments - 1))), len(data), self._block_size) - return self._write(offset, data) + return self._queue_write(offset, data) def put_crypttext_hashes(self, hashes): # plaintext_hash_tree precedes crypttext_hash_tree. It is not used, and # so is not explicitly written, but we need to write everything, so # fill it in with nulls. - d = self._write(self._offsets['plaintext_hash_tree'], b"\x00" * self._segment_hash_size) + d = self._queue_write(self._offsets['plaintext_hash_tree'], b"\x00" * self._segment_hash_size) d.addCallback(lambda _: self._really_put_crypttext_hashes(hashes)) return d @@ -212,7 +250,7 @@ class WriteBucketProxy(object): precondition(offset + len(data) <= self._offsets['block_hashes'], offset, len(data), offset+len(data), self._offsets['block_hashes']) - return self._write(offset, data) + return self._queue_write(offset, data) def put_block_hashes(self, blockhashes): offset = self._offsets['block_hashes'] @@ -223,7 +261,7 @@ class WriteBucketProxy(object): precondition(offset + len(data) <= self._offsets['share_hashes'], offset, len(data), offset+len(data), self._offsets['share_hashes']) - return self._write(offset, data) + return self._queue_write(offset, data) def put_share_hashes(self, sharehashes): # sharehashes is a list of (index, hash) tuples, so they get stored @@ -237,29 +275,45 @@ class WriteBucketProxy(object): precondition(offset + len(data) <= self._offsets['uri_extension'], offset, len(data), offset+len(data), self._offsets['uri_extension']) - return self._write(offset, data) + return self._queue_write(offset, data) def put_uri_extension(self, data): offset = self._offsets['uri_extension'] assert isinstance(data, bytes) precondition(len(data) == self._uri_extension_size) length = struct.pack(self.fieldstruct, len(data)) - return self._write(offset, length+data) + return self._queue_write(offset, length+data) - def _write(self, offset, data): - # use a Pipeline to pipeline several writes together. TODO: another - # speedup would be to coalesce small writes into a single call: this - # would reduce the foolscap CPU overhead per share, but wouldn't - # reduce the number of round trips, so it might not be worth the - # effort. - self._written_bytes += len(data) - return self._pipeline.add(len(data), - self._rref.callRemote, "write", offset, data) + def _queue_write(self, offset, data): + """ + This queues up small writes to be written in a single batched larger + write. + + Callers of this function are expected to queue the data in order, with + no holes. As such, the offset is technically unnecessary, but is used + to check the inputs. Possibly we should get rid of it. + """ + assert offset == self._write_buffer.get_total_bytes() + if self._write_buffer.queue_write(data): + return self._actually_write() + else: + return defer.succeed(False) + + def _actually_write(self): + """Write data to the server.""" + offset, data = self._write_buffer.flush() + return self._rref.callRemote("write", offset, data) def close(self): - assert self._written_bytes == self.get_allocated_size(), f"{self._written_bytes} != {self.get_allocated_size()}" - d = self._pipeline.add(0, self._rref.callRemote, "close") - d.addCallback(lambda ign: self._pipeline.flush()) + assert self._write_buffer.get_total_bytes() == self.get_allocated_size(), ( + f"{self._written_buffer.get_total_bytes_queued()} != {self.get_allocated_size()}" + ) + if self._write_buffer.get_queued_bytes() > 0: + d = self._actually_write() + else: + # No data queued, don't send empty string write. + d = defer.succeed(True) + d.addCallback(lambda _: self._rref.callRemote("close")) return d def abort(self): @@ -371,16 +425,16 @@ class ReadBucketProxy(object): self._fieldsize = fieldsize self._fieldstruct = fieldstruct - for field in ( 'data', - 'plaintext_hash_tree', # UNUSED - 'crypttext_hash_tree', - 'block_hashes', - 'share_hashes', - 'uri_extension', - ): + for field_name in ( 'data', + 'plaintext_hash_tree', # UNUSED + 'crypttext_hash_tree', + 'block_hashes', + 'share_hashes', + 'uri_extension', + ): offset = struct.unpack(fieldstruct, data[x:x+fieldsize])[0] x += fieldsize - self._offsets[field] = offset + self._offsets[field_name] = offset return self._offsets def _get_block_data(self, unused, blocknum, blocksize, thisblocksize): diff --git a/src/allmydata/mutable/common.py b/src/allmydata/mutable/common.py index 87951c7b2..a498ab02a 100644 --- a/src/allmydata/mutable/common.py +++ b/src/allmydata/mutable/common.py @@ -1,14 +1,7 @@ """ Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations MODE_CHECK = "MODE_CHECK" # query all peers MODE_ANYTHING = "MODE_ANYTHING" # one recoverable version @@ -17,6 +10,9 @@ MODE_WRITE = "MODE_WRITE" # replace all shares, probably.. not for initial MODE_READ = "MODE_READ" MODE_REPAIR = "MODE_REPAIR" # query all peers, get the privkey +from allmydata.crypto import aes, rsa +from allmydata.util import hashutil + class NotWriteableError(Exception): pass @@ -68,3 +64,33 @@ class CorruptShareError(BadShareError): class UnknownVersionError(BadShareError): """The share we received was of a version we don't recognize.""" + + +def encrypt_privkey(writekey: bytes, privkey: bytes) -> bytes: + """ + For SSK, encrypt a private ("signature") key using the writekey. + """ + encryptor = aes.create_encryptor(writekey) + crypttext = aes.encrypt_data(encryptor, privkey) + return crypttext + +def decrypt_privkey(writekey: bytes, enc_privkey: bytes) -> rsa.PrivateKey: + """ + The inverse of ``encrypt_privkey``. + """ + decryptor = aes.create_decryptor(writekey) + privkey = aes.decrypt_data(decryptor, enc_privkey) + return privkey + +def derive_mutable_keys(keypair: tuple[rsa.PublicKey, rsa.PrivateKey]) -> tuple[bytes, bytes, bytes]: + """ + Derive the SSK writekey, encrypted writekey, and fingerprint from the + public/private ("verification" / "signature") keypair. + """ + pubkey, privkey = keypair + pubkey_s = rsa.der_string_from_verifying_key(pubkey) + privkey_s = rsa.der_string_from_signing_key(privkey) + writekey = hashutil.ssk_writekey_hash(privkey_s) + encprivkey = encrypt_privkey(writekey, privkey_s) + fingerprint = hashutil.ssk_pubkey_fingerprint_hash(pubkey_s) + return writekey, encprivkey, fingerprint diff --git a/src/allmydata/mutable/filenode.py b/src/allmydata/mutable/filenode.py index cd8cb0dc7..00b31c52b 100644 --- a/src/allmydata/mutable/filenode.py +++ b/src/allmydata/mutable/filenode.py @@ -1,14 +1,7 @@ """ Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations import random @@ -16,8 +9,6 @@ from zope.interface import implementer from twisted.internet import defer, reactor from foolscap.api import eventually -from allmydata.crypto import aes -from allmydata.crypto import rsa from allmydata.interfaces import IMutableFileNode, ICheckable, ICheckResults, \ NotEnoughSharesError, MDMF_VERSION, SDMF_VERSION, IMutableUploadable, \ IMutableFileVersion, IWriteable @@ -28,8 +19,14 @@ from allmydata.uri import WriteableSSKFileURI, ReadonlySSKFileURI, \ from allmydata.monitor import Monitor from allmydata.mutable.publish import Publish, MutableData,\ TransformingUploadable -from allmydata.mutable.common import MODE_READ, MODE_WRITE, MODE_CHECK, UnrecoverableFileError, \ - UncoordinatedWriteError +from allmydata.mutable.common import ( + MODE_READ, + MODE_WRITE, + MODE_CHECK, + UnrecoverableFileError, + UncoordinatedWriteError, + derive_mutable_keys, +) from allmydata.mutable.servermap import ServerMap, ServermapUpdater from allmydata.mutable.retrieve import Retrieve from allmydata.mutable.checker import MutableChecker, MutableCheckAndRepairer @@ -139,13 +136,10 @@ class MutableFileNode(object): Deferred that fires (with the MutableFileNode instance you should use) when it completes. """ - (pubkey, privkey) = keypair - self._pubkey, self._privkey = pubkey, privkey - pubkey_s = rsa.der_string_from_verifying_key(self._pubkey) - privkey_s = rsa.der_string_from_signing_key(self._privkey) - self._writekey = hashutil.ssk_writekey_hash(privkey_s) - self._encprivkey = self._encrypt_privkey(self._writekey, privkey_s) - self._fingerprint = hashutil.ssk_pubkey_fingerprint_hash(pubkey_s) + self._pubkey, self._privkey = keypair + self._writekey, self._encprivkey, self._fingerprint = derive_mutable_keys( + keypair, + ) if version == MDMF_VERSION: self._uri = WriteableMDMFFileURI(self._writekey, self._fingerprint) self._protocol_version = version @@ -171,16 +165,6 @@ class MutableFileNode(object): (contents, type(contents)) return contents(self) - def _encrypt_privkey(self, writekey, privkey): - encryptor = aes.create_encryptor(writekey) - crypttext = aes.encrypt_data(encryptor, privkey) - return crypttext - - def _decrypt_privkey(self, enc_privkey): - decryptor = aes.create_decryptor(self._writekey) - privkey = aes.decrypt_data(decryptor, enc_privkey) - return privkey - def _populate_pubkey(self, pubkey): self._pubkey = pubkey def _populate_required_shares(self, required_shares): diff --git a/src/allmydata/mutable/retrieve.py b/src/allmydata/mutable/retrieve.py index 32aaa72e5..64573a49a 100644 --- a/src/allmydata/mutable/retrieve.py +++ b/src/allmydata/mutable/retrieve.py @@ -1,15 +1,7 @@ """ Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - # Don't import bytes and str, to prevent API leakage - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, dict, list, object, range, max, min # noqa: F401 +from __future__ import annotations import time @@ -32,7 +24,7 @@ from allmydata import hashtree, codec from allmydata.storage.server import si_b2a from allmydata.mutable.common import CorruptShareError, BadShareError, \ - UncoordinatedWriteError + UncoordinatedWriteError, decrypt_privkey from allmydata.mutable.layout import MDMFSlotReadProxy @implementer(IRetrieveStatus) @@ -931,9 +923,10 @@ class Retrieve(object): def _try_to_validate_privkey(self, enc_privkey, reader, server): - alleged_privkey_s = self._node._decrypt_privkey(enc_privkey) + node_writekey = self._node.get_writekey() + alleged_privkey_s = decrypt_privkey(node_writekey, enc_privkey) alleged_writekey = hashutil.ssk_writekey_hash(alleged_privkey_s) - if alleged_writekey != self._node.get_writekey(): + if alleged_writekey != node_writekey: self.log("invalid privkey from %s shnum %d" % (reader, reader.shnum), level=log.WEIRD, umid="YIw4tA") diff --git a/src/allmydata/mutable/servermap.py b/src/allmydata/mutable/servermap.py index 211b1fc16..99aa85d24 100644 --- a/src/allmydata/mutable/servermap.py +++ b/src/allmydata/mutable/servermap.py @@ -1,16 +1,8 @@ """ Ported to Python 3. """ -from __future__ import print_function -from __future__ import absolute_import -from __future__ import division -from __future__ import unicode_literals +from __future__ import annotations -from future.utils import PY2 -if PY2: - # Doesn't import str to prevent API leakage on Python 2 - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, max, min # noqa: F401 -from past.builtins import unicode from six import ensure_str import sys, time, copy @@ -29,7 +21,7 @@ from allmydata.storage.server import si_b2a from allmydata.interfaces import IServermapUpdaterStatus from allmydata.mutable.common import MODE_CHECK, MODE_ANYTHING, MODE_WRITE, \ - MODE_READ, MODE_REPAIR, CorruptShareError + MODE_READ, MODE_REPAIR, CorruptShareError, decrypt_privkey from allmydata.mutable.layout import SIGNED_PREFIX_LENGTH, MDMFSlotReadProxy @implementer(IServermapUpdaterStatus) @@ -203,8 +195,8 @@ class ServerMap(object): (seqnum, root_hash, IV, segsize, datalength, k, N, prefix, offsets_tuple) = verinfo print("[%s]: sh#%d seq%d-%s %d-of-%d len%d" % - (unicode(server.get_name(), "utf-8"), shnum, - seqnum, unicode(base32.b2a(root_hash)[:4], "utf-8"), k, N, + (str(server.get_name(), "utf-8"), shnum, + seqnum, str(base32.b2a(root_hash)[:4], "utf-8"), k, N, datalength), file=out) if self._problems: print("%d PROBLEMS" % len(self._problems), file=out) @@ -276,7 +268,7 @@ class ServerMap(object): """Take a versionid, return a string that describes it.""" (seqnum, root_hash, IV, segsize, datalength, k, N, prefix, offsets_tuple) = verinfo - return "seq%d-%s" % (seqnum, unicode(base32.b2a(root_hash)[:4], "utf-8")) + return "seq%d-%s" % (seqnum, str(base32.b2a(root_hash)[:4], "utf-8")) def summarize_versions(self): """Return a string describing which versions we know about.""" @@ -824,7 +816,7 @@ class ServermapUpdater(object): def notify_server_corruption(self, server, shnum, reason): - if isinstance(reason, unicode): + if isinstance(reason, str): reason = reason.encode("utf-8") ss = server.get_storage_server() ss.advise_corrupt_share( @@ -879,7 +871,7 @@ class ServermapUpdater(object): # ok, it's a valid verinfo. Add it to the list of validated # versions. self.log(" found valid version %d-%s from %s-sh%d: %d-%d/%d/%d" - % (seqnum, unicode(base32.b2a(root_hash)[:4], "utf-8"), + % (seqnum, str(base32.b2a(root_hash)[:4], "utf-8"), ensure_str(server.get_name()), shnum, k, n, segsize, datalen), parent=lp) @@ -951,9 +943,10 @@ class ServermapUpdater(object): writekey stored in my node. If it is valid, then I set the privkey and encprivkey properties of the node. """ - alleged_privkey_s = self._node._decrypt_privkey(enc_privkey) + node_writekey = self._node.get_writekey() + alleged_privkey_s = decrypt_privkey(node_writekey, enc_privkey) alleged_writekey = hashutil.ssk_writekey_hash(alleged_privkey_s) - if alleged_writekey != self._node.get_writekey(): + if alleged_writekey != node_writekey: self.log("invalid privkey from %r shnum %d" % (server.get_name(), shnum), parent=lp, level=log.WEIRD, umid="aJVccw") diff --git a/src/allmydata/node.py b/src/allmydata/node.py index 8a36fdff7..34abb307f 100644 --- a/src/allmydata/node.py +++ b/src/allmydata/node.py @@ -752,7 +752,7 @@ def create_connection_handlers(config, i2p_provider, tor_provider): def create_tub(tub_options, default_connection_handlers, foolscap_connection_handlers, - handler_overrides={}, **kwargs): + handler_overrides={}, force_foolscap=False, **kwargs): """ Create a Tub with the right options and handlers. It will be ephemeral unless the caller provides certFile= in kwargs @@ -762,10 +762,16 @@ def create_tub(tub_options, default_connection_handlers, foolscap_connection_han :param dict tub_options: every key-value pair in here will be set in the new Tub via `Tub.setOption` + + :param bool force_foolscap: If True, only allow Foolscap, not just HTTPS + storage protocol. """ - # We listen simulataneously for both Foolscap and HTTPS on the same port, + # We listen simultaneously for both Foolscap and HTTPS on the same port, # so we have to create a special Foolscap Tub for that to work: - tub = create_tub_with_https_support(**kwargs) + if force_foolscap: + tub = Tub(**kwargs) + else: + tub = create_tub_with_https_support(**kwargs) for (name, value) in list(tub_options.items()): tub.setOption(name, value) @@ -956,14 +962,20 @@ def create_main_tub(config, tub_options, # FIXME? "node.pem" was the CERTFILE option/thing certfile = config.get_private_path("node.pem") - tub = create_tub( tub_options, default_connection_handlers, foolscap_connection_handlers, + # TODO eventually we will want the default to be False, but for now we + # don't want to enable HTTP by default. + # https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3934 + force_foolscap=config.get_config( + "storage", "force_foolscap", default=True, boolean=True + ), handler_overrides=handler_overrides, certFile=certfile, ) + if portlocation is None: log.msg("Tub is not listening") else: diff --git a/src/allmydata/nodemaker.py b/src/allmydata/nodemaker.py index 23ba4b451..1b7ea5f45 100644 --- a/src/allmydata/nodemaker.py +++ b/src/allmydata/nodemaker.py @@ -1,17 +1,12 @@ """ -Ported to Python 3. +Create file nodes of various types. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations import weakref from zope.interface import implementer +from twisted.internet.defer import succeed from allmydata.util.assertutil import precondition from allmydata.interfaces import INodeMaker from allmydata.immutable.literal import LiteralFileNode @@ -22,6 +17,7 @@ from allmydata.mutable.publish import MutableData from allmydata.dirnode import DirectoryNode, pack_children from allmydata.unknown import UnknownNode from allmydata.blacklist import ProhibitedNode +from allmydata.crypto.rsa import PublicKey, PrivateKey from allmydata import uri @@ -126,12 +122,15 @@ class NodeMaker(object): return self._create_dirnode(filenode) return None - def create_mutable_file(self, contents=None, version=None): + def create_mutable_file(self, contents=None, version=None, keypair: tuple[PublicKey, PrivateKey] | None = None): if version is None: version = self.mutable_file_default n = MutableFileNode(self.storage_broker, self.secret_holder, self.default_encoding_parameters, self.history) - d = self.key_generator.generate() + if keypair is None: + d = self.key_generator.generate() + else: + d = succeed(keypair) d.addCallback(n.create_with_keys, contents, version=version) d.addCallback(lambda res: n) return d diff --git a/src/allmydata/scripts/cli.py b/src/allmydata/scripts/cli.py index 55975b8c5..579b37906 100644 --- a/src/allmydata/scripts/cli.py +++ b/src/allmydata/scripts/cli.py @@ -180,10 +180,22 @@ class GetOptions(FileStoreOptions): class PutOptions(FileStoreOptions): optFlags = [ ("mutable", "m", "Create a mutable file instead of an immutable one (like --format=SDMF)"), - ] + ] + optParameters = [ ("format", None, None, "Create a file with the given format: SDMF and MDMF for mutable, CHK (default) for immutable. (case-insensitive)"), - ] + + ("private-key-path", None, None, + "***Warning*** " + "It is possible to use this option to spoil the normal security properties of mutable objects. " + "It is also possible to corrupt or destroy data with this option. " + "Most users will not need this option and can ignore it. " + "For mutables only, " + "this gives a file containing a PEM-encoded 2048 bit RSA private key to use as the signature key for the mutable. " + "The private key must be handled at least as strictly as the resulting capability string. " + "A single private key must not be used for more than one mutable." + ), + ] def parseArgs(self, arg1=None, arg2=None): # see Examples below diff --git a/src/allmydata/scripts/tahoe_put.py b/src/allmydata/scripts/tahoe_put.py index 1ea45e8ea..c04b6b4bc 100644 --- a/src/allmydata/scripts/tahoe_put.py +++ b/src/allmydata/scripts/tahoe_put.py @@ -1,23 +1,32 @@ """ -Ported to Python 3. +Implement the ``tahoe put`` command. """ -from __future__ import unicode_literals -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations from io import BytesIO from urllib.parse import quote as url_quote +from base64 import urlsafe_b64encode +from cryptography.hazmat.primitives.serialization import load_pem_private_key + +from twisted.python.filepath import FilePath + +from allmydata.crypto.rsa import PrivateKey, der_string_from_signing_key from allmydata.scripts.common_http import do_http, format_http_success, format_http_error from allmydata.scripts.common import get_alias, DEFAULT_ALIAS, escape_path, \ UnknownAliasError from allmydata.util.encodingutil import quote_output +def load_private_key(path: str) -> str: + """ + Load a private key from a file and return it in a format appropriate + to include in the HTTP request. + """ + privkey = load_pem_private_key(FilePath(path).getContent(), password=None) + assert isinstance(privkey, PrivateKey) + derbytes = der_string_from_signing_key(privkey) + return urlsafe_b64encode(derbytes).decode("ascii") + def put(options): """ @param verbosity: 0, 1, or 2, meaning quiet, verbose, or very verbose @@ -29,6 +38,10 @@ def put(options): from_file = options.from_file to_file = options.to_file mutable = options['mutable'] + if options["private-key-path"] is None: + private_key = None + else: + private_key = load_private_key(options["private-key-path"]) format = options['format'] if options['quiet']: verbosity = 0 @@ -79,6 +92,12 @@ def put(options): queryargs = [] if mutable: queryargs.append("mutable=true") + if private_key is not None: + queryargs.append(f"private-key={private_key}") + else: + if private_key is not None: + raise Exception("Can only supply a private key for mutables.") + if format: queryargs.append("format=%s" % format) if queryargs: @@ -92,10 +111,7 @@ def put(options): if verbosity > 0: print("waiting for file data on stdin..", file=stderr) # We're uploading arbitrary files, so this had better be bytes: - if PY2: - stdinb = stdin - else: - stdinb = stdin.buffer + stdinb = stdin.buffer data = stdinb.read() infileobj = BytesIO(data) diff --git a/src/allmydata/scripts/tahoe_run.py b/src/allmydata/scripts/tahoe_run.py index e22e8c307..aaf234b61 100644 --- a/src/allmydata/scripts/tahoe_run.py +++ b/src/allmydata/scripts/tahoe_run.py @@ -21,7 +21,11 @@ from twisted.scripts import twistd from twisted.python import usage from twisted.python.filepath import FilePath from twisted.python.reflect import namedAny -from twisted.internet.defer import maybeDeferred +from twisted.python.failure import Failure +from twisted.internet.defer import maybeDeferred, Deferred +from twisted.internet.protocol import Protocol +from twisted.internet.stdio import StandardIO +from twisted.internet.error import ReactorNotRunning from twisted.application.service import Service from allmydata.scripts.default_nodedir import _default_nodedir @@ -155,6 +159,8 @@ class DaemonizeTheRealService(Service, HookMixin): def startService(self): + from twisted.internet import reactor + def start(): node_to_instance = { u"client": lambda: maybeDeferred(namedAny("allmydata.client.create_client"), self.basedir), @@ -186,7 +192,7 @@ class DaemonizeTheRealService(Service, HookMixin): ) ) else: - self.stderr.write("\nUnknown error\n") + self.stderr.write("\nUnknown error, here's the traceback:\n") reason.printTraceback(self.stderr) reactor.stop() @@ -194,12 +200,14 @@ class DaemonizeTheRealService(Service, HookMixin): def created(srv): srv.setServiceParent(self.parent) + # exiting on stdin-closed facilitates cleanup when run + # as a subprocess + on_stdin_close(reactor, reactor.stop) d.addCallback(created) d.addErrback(handle_config_error) d.addBoth(self._call_hook, 'running') return d - from twisted.internet import reactor reactor.callWhenRunning(start) @@ -213,6 +221,46 @@ class DaemonizeTahoeNodePlugin(object): return DaemonizeTheRealService(self.nodetype, self.basedir, so) +def on_stdin_close(reactor, fn): + """ + Arrange for the function `fn` to run when our stdin closes + """ + when_closed_d = Deferred() + + class WhenClosed(Protocol): + """ + Notify a Deferred when our connection is lost .. as this is passed + to twisted's StandardIO class, it is used to detect our parent + going away. + """ + + def connectionLost(self, reason): + when_closed_d.callback(None) + + def on_close(arg): + try: + fn() + except ReactorNotRunning: + pass + except Exception: + # for our "exit" use-case failures will _mostly_ just be + # ReactorNotRunning (because we're already shutting down + # when our stdin closes) but no matter what "bad thing" + # happens we just want to ignore it .. although other + # errors might be interesting so we'll log those + print(Failure()) + return arg + + when_closed_d.addBoth(on_close) + # we don't need to do anything with this instance because it gets + # hooked into the reactor and thus remembered .. but we return it + # for Windows testing purposes. + return StandardIO( + proto=WhenClosed(), + reactor=reactor, + ) + + def run(reactor, config, runApp=twistd.runApp): """ Runs a Tahoe-LAFS node in the foreground. diff --git a/src/allmydata/storage/http_client.py b/src/allmydata/storage/http_client.py index 16d426dda..90bda7fc0 100644 --- a/src/allmydata/storage/http_client.py +++ b/src/allmydata/storage/http_client.py @@ -20,7 +20,11 @@ from twisted.web.http_headers import Headers from twisted.web import http from twisted.web.iweb import IPolicyForHTTPS from twisted.internet.defer import inlineCallbacks, returnValue, fail, Deferred, succeed -from twisted.internet.interfaces import IOpenSSLClientConnectionCreator +from twisted.internet.interfaces import ( + IOpenSSLClientConnectionCreator, + IReactorTime, + IDelayedCall, +) from twisted.internet.ssl import CertificateOptions from twisted.web.client import Agent, HTTPConnectionPool from zope.interface import implementer @@ -83,35 +87,35 @@ _SCHEMAS = { "allocate_buckets": Schema( """ response = { - already-have: #6.258([* uint]) - allocated: #6.258([* uint]) + already-have: #6.258([0*256 uint]) + allocated: #6.258([0*256 uint]) } """ ), "immutable_write_share_chunk": Schema( """ response = { - required: [* {begin: uint, end: uint}] + required: [0* {begin: uint, end: uint}] } """ ), "list_shares": Schema( """ - response = #6.258([* uint]) + response = #6.258([0*256 uint]) """ ), "mutable_read_test_write": Schema( """ response = { "success": bool, - "data": {* share_number: [* bstr]} + "data": {0*256 share_number: [0* bstr]} } share_number = uint """ ), "mutable_list_shares": Schema( """ - response = #6.258([* uint]) + response = #6.258([0*256 uint]) """ ), } @@ -124,16 +128,22 @@ class _LengthLimitedCollector: """ remaining_length: int + timeout_on_silence: IDelayedCall f: BytesIO = field(factory=BytesIO) def __call__(self, data: bytes): + self.timeout_on_silence.reset(60) self.remaining_length -= len(data) if self.remaining_length < 0: raise ValueError("Response length was too long") self.f.write(data) -def limited_content(response, max_length: int = 30 * 1024 * 1024) -> Deferred[BinaryIO]: +def limited_content( + response, + clock: IReactorTime, + max_length: int = 30 * 1024 * 1024, +) -> Deferred[BinaryIO]: """ Like ``treq.content()``, but limit data read from the response to a set length. If the response is longer than the max allowed length, the result @@ -142,39 +152,29 @@ def limited_content(response, max_length: int = 30 * 1024 * 1024) -> Deferred[Bi A potentially useful future improvement would be using a temporary file to store the content; since filesystem buffering means that would use memory for small responses and disk for large responses. + + This will time out if no data is received for 60 seconds; so long as a + trickle of data continues to arrive, it will continue to run. """ - collector = _LengthLimitedCollector(max_length) + d = succeed(None) + timeout = clock.callLater(60, d.cancel) + collector = _LengthLimitedCollector(max_length, timeout) + # Make really sure everything gets called in Deferred context, treq might # call collector directly... - d = succeed(None) d.addCallback(lambda _: treq.collect(response, collector)) def done(_): + timeout.cancel() collector.f.seek(0) return collector.f - d.addCallback(done) - return d + def failed(f): + if timeout.active(): + timeout.cancel() + return f - -def _decode_cbor(response, schema: Schema): - """Given HTTP response, return decoded CBOR body.""" - - def got_content(f: BinaryIO): - data = f.read() - schema.validate_cbor(data) - return loads(data) - - if response.code > 199 and response.code < 300: - content_type = get_content_type(response.headers) - if content_type == CBOR_MIME_TYPE: - return limited_content(response).addCallback(got_content) - else: - raise ClientException(-1, "Server didn't send CBOR") - else: - return treq.content(response).addCallback( - lambda data: fail(ClientException(response.code, response.phrase, data)) - ) + return d.addCallbacks(done, failed) @define @@ -276,42 +276,68 @@ class _StorageClientHTTPSPolicy: ) -@define +@define(hash=True) class StorageClient(object): """ Low-level HTTP client that talks to the HTTP storage server. """ + # If set, we're doing unit testing and we should call this with + # HTTPConnectionPool we create. + TEST_MODE_REGISTER_HTTP_POOL = None + + @classmethod + def start_test_mode(cls, callback): + """Switch to testing mode. + + In testing mode we register the pool with test system using the given + callback so it can Do Things, most notably killing off idle HTTP + connections at test shutdown and, in some tests, in the midddle of the + test. + """ + cls.TEST_MODE_REGISTER_HTTP_POOL = callback + + @classmethod + def stop_test_mode(cls): + """Stop testing mode.""" + cls.TEST_MODE_REGISTER_HTTP_POOL = None + # The URL is a HTTPS URL ("https://..."). To construct from a NURL, use # ``StorageClient.from_nurl()``. _base_url: DecodedURL _swissnum: bytes _treq: Union[treq, StubTreq, HTTPClient] + _clock: IReactorTime @classmethod def from_nurl( - cls, nurl: DecodedURL, reactor, persistent: bool = True + cls, + nurl: DecodedURL, + reactor, ) -> StorageClient: """ Create a ``StorageClient`` for the given NURL. - - ``persistent`` indicates whether to use persistent HTTP connections. """ assert nurl.fragment == "v=1" assert nurl.scheme == "pb" swissnum = nurl.path[0].encode("ascii") certificate_hash = nurl.user.encode("ascii") + pool = HTTPConnectionPool(reactor) + pool.maxPersistentPerHost = 20 + + if cls.TEST_MODE_REGISTER_HTTP_POOL is not None: + cls.TEST_MODE_REGISTER_HTTP_POOL(pool) treq_client = HTTPClient( Agent( reactor, _StorageClientHTTPSPolicy(expected_spki_hash=certificate_hash), - pool=HTTPConnectionPool(reactor, persistent=persistent), + pool=pool, ) ) https_url = DecodedURL().replace(scheme="https", host=nurl.host, port=nurl.port) - return cls(https_url, swissnum, treq_client) + return cls(https_url, swissnum, treq_client, reactor) def relative_url(self, path): """Get a URL relative to the base URL.""" @@ -337,6 +363,7 @@ class StorageClient(object): write_enabler_secret=None, headers=None, message_to_serialize=None, + timeout: float = 60, **kwargs, ): """ @@ -345,6 +372,8 @@ class StorageClient(object): If ``message_to_serialize`` is set, it will be serialized (by default with CBOR) and set as the request body. + + Default timeout is 60 seconds. """ headers = self._get_headers(headers) @@ -376,16 +405,37 @@ class StorageClient(object): kwargs["data"] = dumps(message_to_serialize) headers.addRawHeader("Content-Type", CBOR_MIME_TYPE) - return self._treq.request(method, url, headers=headers, **kwargs) + return self._treq.request( + method, url, headers=headers, timeout=timeout, **kwargs + ) + + def decode_cbor(self, response, schema: Schema): + """Given HTTP response, return decoded CBOR body.""" + + def got_content(f: BinaryIO): + data = f.read() + schema.validate_cbor(data) + return loads(data) + + if response.code > 199 and response.code < 300: + content_type = get_content_type(response.headers) + if content_type == CBOR_MIME_TYPE: + return limited_content(response, self._clock).addCallback(got_content) + else: + raise ClientException(-1, "Server didn't send CBOR") + else: + return treq.content(response).addCallback( + lambda data: fail(ClientException(response.code, response.phrase, data)) + ) +@define(hash=True) class StorageClientGeneral(object): """ High-level HTTP APIs that aren't immutable- or mutable-specific. """ - def __init__(self, client): # type: (StorageClient) -> None - self._client = client + _client: StorageClient @inlineCallbacks def get_version(self): @@ -394,7 +444,9 @@ class StorageClientGeneral(object): """ url = self._client.relative_url("/storage/v1/version") response = yield self._client.request("GET", url) - decoded_response = yield _decode_cbor(response, _SCHEMAS["get_version"]) + decoded_response = yield self._client.decode_cbor( + response, _SCHEMAS["get_version"] + ) returnValue(decoded_response) @inlineCallbacks @@ -461,6 +513,9 @@ def read_share_chunk( share_type, _encode_si(storage_index), share_number ) ) + # The default 60 second timeout is for getting the response, so it doesn't + # include the time it takes to download the body... so we will will deal + # with that later, via limited_content(). response = yield client.request( "GET", url, @@ -469,6 +524,7 @@ def read_share_chunk( # but Range constructor does that the conversion for us. {"range": [Range("bytes", [(offset, offset + length)]).to_header()]} ), + unbuffered=True, # Don't buffer the response in memory. ) if response.code == http.NO_CONTENT: @@ -491,7 +547,7 @@ def read_share_chunk( raise ValueError("Server sent more than we asked for?!") # It might also send less than we asked for. That's (probably) OK, e.g. # if we went past the end of the file. - body = yield limited_content(response, supposed_length) + body = yield limited_content(response, client._clock, supposed_length) body.seek(0, SEEK_END) actual_length = body.tell() if actual_length != supposed_length: @@ -534,7 +590,7 @@ async def advise_corrupt_share( ) -@define +@define(hash=True) class StorageClientImmutables(object): """ APIs for interacting with immutables. @@ -578,7 +634,9 @@ class StorageClientImmutables(object): upload_secret=upload_secret, message_to_serialize=message, ) - decoded_response = yield _decode_cbor(response, _SCHEMAS["allocate_buckets"]) + decoded_response = yield self._client.decode_cbor( + response, _SCHEMAS["allocate_buckets"] + ) returnValue( ImmutableCreateResult( already_have=decoded_response["already-have"], @@ -654,7 +712,9 @@ class StorageClientImmutables(object): raise ClientException( response.code, ) - body = yield _decode_cbor(response, _SCHEMAS["immutable_write_share_chunk"]) + body = yield self._client.decode_cbor( + response, _SCHEMAS["immutable_write_share_chunk"] + ) remaining = RangeMap() for chunk in body["required"]: remaining.set(True, chunk["begin"], chunk["end"]) @@ -683,7 +743,7 @@ class StorageClientImmutables(object): url, ) if response.code == http.OK: - body = yield _decode_cbor(response, _SCHEMAS["list_shares"]) + body = yield self._client.decode_cbor(response, _SCHEMAS["list_shares"]) returnValue(set(body)) else: raise ClientException(response.code) @@ -800,7 +860,9 @@ class StorageClientMutables: message_to_serialize=message, ) if response.code == http.OK: - result = await _decode_cbor(response, _SCHEMAS["mutable_read_test_write"]) + result = await self._client.decode_cbor( + response, _SCHEMAS["mutable_read_test_write"] + ) return ReadTestWriteResult(success=result["success"], reads=result["data"]) else: raise ClientException(response.code, (await response.content())) @@ -829,7 +891,9 @@ class StorageClientMutables: ) response = await self._client.request("GET", url) if response.code == http.OK: - return await _decode_cbor(response, _SCHEMAS["mutable_list_shares"]) + return await self._client.decode_cbor( + response, _SCHEMAS["mutable_list_shares"] + ) else: raise ClientException(response.code) diff --git a/src/allmydata/storage/http_server.py b/src/allmydata/storage/http_server.py index eefb9b906..094b29c04 100644 --- a/src/allmydata/storage/http_server.py +++ b/src/allmydata/storage/http_server.py @@ -9,6 +9,8 @@ from functools import wraps from base64 import b64decode import binascii from tempfile import TemporaryFile +from os import SEEK_END, SEEK_SET +import mmap from cryptography.x509 import Certificate as CryptoCertificate from zope.interface import implementer @@ -39,7 +41,7 @@ from cryptography.x509 import load_pem_x509_certificate # TODO Make sure to use pure Python versions? -from cbor2 import dump, loads +import cbor2 from pycddl import Schema, ValidationError as CDDLValidationError from .server import StorageServer from .http_common import ( @@ -100,7 +102,7 @@ def _authorization_decorator(required_secrets): @wraps(f) def route(self, request, *args, **kwargs): if not timing_safe_compare( - request.requestHeaders.getRawHeaders("Authorization", [None])[0].encode( + request.requestHeaders.getRawHeaders("Authorization", [""])[0].encode( "utf-8" ), swissnum_auth_header(self._swissnum), @@ -260,7 +262,7 @@ _SCHEMAS = { "allocate_buckets": Schema( """ request = { - share-numbers: #6.258([*256 uint]) + share-numbers: #6.258([0*256 uint]) allocated-size: uint } """ @@ -276,15 +278,13 @@ _SCHEMAS = { """ request = { "test-write-vectors": { - ; TODO Add length limit here, after - ; https://github.com/anweiss/cddl/issues/128 is fixed - * share_number => { - "test": [*30 {"offset": uint, "size": uint, "specimen": bstr}] - "write": [*30 {"offset": uint, "data": bstr}] + 0*256 share_number : { + "test": [0*30 {"offset": uint, "size": uint, "specimen": bstr}] + "write": [* {"offset": uint, "data": bstr}] "new-length": uint / null } } - "read-vector": [*30 {"offset": uint, "size": uint}] + "read-vector": [0*30 {"offset": uint, "size": uint}] } share_number = uint """ @@ -517,7 +517,7 @@ class HTTPServer(object): if accept.best == CBOR_MIME_TYPE: request.setHeader("Content-Type", CBOR_MIME_TYPE) f = TemporaryFile() - dump(data, f) + cbor2.dump(data, f) def read_data(offset: int, length: int) -> bytes: f.seek(offset) @@ -529,27 +529,47 @@ class HTTPServer(object): # https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3861 raise _HTTPError(http.NOT_ACCEPTABLE) - def _read_encoded(self, request, schema: Schema) -> Any: + def _read_encoded( + self, request, schema: Schema, max_size: int = 1024 * 1024 + ) -> Any: """ Read encoded request body data, decoding it with CBOR by default. - Somewhat arbitrarily, limit body size to 1MB; this may be too low, we - may want to customize per query type, but this is the starting point - for now. + Somewhat arbitrarily, limit body size to 1MiB by default. """ content_type = get_content_type(request.requestHeaders) - if content_type == CBOR_MIME_TYPE: - # Read 1 byte more than 1MB. We expect length to be 1MB or - # less; if it's more assume it's not a legitimate message. - message = request.content.read(1024 * 1024 + 1) - if len(message) > 1024 * 1024: - raise _HTTPError(http.REQUEST_ENTITY_TOO_LARGE) - schema.validate_cbor(message) - result = loads(message) - return result - else: + if content_type != CBOR_MIME_TYPE: raise _HTTPError(http.UNSUPPORTED_MEDIA_TYPE) + # Make sure it's not too large: + request.content.seek(SEEK_END, 0) + if request.content.tell() > max_size: + raise _HTTPError(http.REQUEST_ENTITY_TOO_LARGE) + request.content.seek(SEEK_SET, 0) + + # We don't want to load the whole message into memory, cause it might + # be quite large. The CDDL validator takes a read-only bytes-like + # thing. Luckily, for large request bodies twisted.web will buffer the + # data in a file, so we can use mmap() to get a memory view. The CDDL + # validator will not make a copy, so it won't increase memory usage + # beyond that. + try: + fd = request.content.fileno() + except (ValueError, OSError): + fd = -1 + if fd >= 0: + # It's a file, so we can use mmap() to save memory. + message = mmap.mmap(fd, 0, access=mmap.ACCESS_READ) + else: + message = request.content.read() + schema.validate_cbor(message) + + # The CBOR parser will allocate more memory, but at least we can feed + # it the file-like object, so that if it's large it won't be make two + # copies. + request.content.seek(SEEK_SET, 0) + return cbor2.load(request.content) + ##### Generic APIs ##### @_authorized_route(_app, set(), "/storage/v1/version", methods=["GET"]) @@ -748,7 +768,9 @@ class HTTPServer(object): ) def mutable_read_test_write(self, request, authorization, storage_index): """Read/test/write combined operation for mutables.""" - rtw_request = self._read_encoded(request, _SCHEMAS["mutable_read_test_write"]) + rtw_request = self._read_encoded( + request, _SCHEMAS["mutable_read_test_write"], max_size=2**48 + ) secrets = ( authorization[Secrets.WRITE_ENABLER], authorization[Secrets.LEASE_RENEW], diff --git a/src/allmydata/storage_client.py b/src/allmydata/storage_client.py index 91073579d..8a8aa1f2e 100644 --- a/src/allmydata/storage_client.py +++ b/src/allmydata/storage_client.py @@ -30,6 +30,8 @@ Ported to Python 3. # # 6: implement other sorts of IStorageClient classes: S3, etc +from __future__ import annotations + from six import ensure_text from typing import Union @@ -41,13 +43,16 @@ import hashlib from configparser import NoSectionError import attr +from hyperlink import DecodedURL from zope.interface import ( Attribute, Interface, implementer, ) +from twisted.python.failure import Failure from twisted.web import http -from twisted.internet import defer +from twisted.internet.task import LoopingCall +from twisted.internet import defer, reactor from twisted.application import service from twisted.plugin import ( getPlugins, @@ -85,6 +90,8 @@ from allmydata.storage.http_client import ( ReadVector, TestWriteVectors, WriteVector, TestVector, ClientException ) +ANONYMOUS_STORAGE_NURLS = "anonymous-storage-NURLs" + # who is responsible for de-duplication? # both? @@ -109,8 +116,8 @@ class StorageClientConfig(object): :ivar preferred_peers: An iterable of the server-ids (``bytes``) of the storage servers where share placement is preferred, in order of - decreasing preference. See the *[client]peers.preferred* - documentation for details. + decreasing preference. See the *[client]peers.preferred* documentation + for details. :ivar dict[unicode, dict[unicode, unicode]] storage_plugins: A mapping from names of ``IFoolscapStoragePlugin`` configured in *tahoe.cfg* to the @@ -286,6 +293,10 @@ class StorageFarmBroker(service.MultiService): by the given announcement. """ assert isinstance(server_id, bytes) + if len(server["ann"].get(ANONYMOUS_STORAGE_NURLS, [])) > 0: + s = HTTPNativeStorageServer(server_id, server["ann"]) + s.on_status_changed(lambda _: self._got_connection()) + return s handler_overrides = server.get("connections", {}) gm_verifier = create_grid_manager_verifier( self.storage_client_config.grid_manager_keys, @@ -569,6 +580,45 @@ class IFoolscapStorageServer(Interface): """ +def _parse_announcement(server_id: bytes, furl: bytes, ann: dict) -> tuple[str, bytes, bytes, bytes, bytes]: + """ + Parse the furl and announcement, return: + + (nickname, permutation_seed, tubid, short_description, long_description) + """ + m = re.match(br'pb://(\w+)@', furl) + assert m, furl + tubid_s = m.group(1).lower() + tubid = base32.a2b(tubid_s) + if "permutation-seed-base32" in ann: + seed = ann["permutation-seed-base32"] + if isinstance(seed, str): + seed = seed.encode("utf-8") + ps = base32.a2b(seed) + elif re.search(br'^v0-[0-9a-zA-Z]{52}$', server_id): + ps = base32.a2b(server_id[3:]) + else: + log.msg("unable to parse serverid '%(server_id)s as pubkey, " + "hashing it to get permutation-seed, " + "may not converge with other clients", + server_id=server_id, + facility="tahoe.storage_broker", + level=log.UNUSUAL, umid="qu86tw") + ps = hashlib.sha256(server_id).digest() + permutation_seed = ps + + assert server_id + long_description = server_id + if server_id.startswith(b"v0-"): + # remove v0- prefix from abbreviated name + short_description = server_id[3:3+8] + else: + short_description = server_id[:8] + nickname = ann.get("nickname", "") + + return (nickname, permutation_seed, tubid, short_description, long_description) + + @implementer(IFoolscapStorageServer) @attr.s(frozen=True) class _FoolscapStorage(object): @@ -613,43 +663,13 @@ class _FoolscapStorage(object): The furl will be a Unicode string on Python 3; on Python 2 it will be either a native (bytes) string or a Unicode string. """ - furl = furl.encode("utf-8") - m = re.match(br'pb://(\w+)@', furl) - assert m, furl - tubid_s = m.group(1).lower() - tubid = base32.a2b(tubid_s) - if "permutation-seed-base32" in ann: - seed = ann["permutation-seed-base32"] - if isinstance(seed, str): - seed = seed.encode("utf-8") - ps = base32.a2b(seed) - elif re.search(br'^v0-[0-9a-zA-Z]{52}$', server_id): - ps = base32.a2b(server_id[3:]) - else: - log.msg("unable to parse serverid '%(server_id)s as pubkey, " - "hashing it to get permutation-seed, " - "may not converge with other clients", - server_id=server_id, - facility="tahoe.storage_broker", - level=log.UNUSUAL, umid="qu86tw") - ps = hashlib.sha256(server_id).digest() - permutation_seed = ps - - assert server_id - long_description = server_id - if server_id.startswith(b"v0-"): - # remove v0- prefix from abbreviated name - short_description = server_id[3:3+8] - else: - short_description = server_id[:8] - nickname = ann.get("nickname", "") - + (nickname, permutation_seed, tubid, short_description, long_description) = _parse_announcement(server_id, furl.encode("utf-8"), ann) return cls( nickname=nickname, permutation_seed=permutation_seed, tubid=tubid, storage_server=storage_server, - furl=furl, + furl=furl.encode("utf-8"), short_description=short_description, long_description=long_description, ) @@ -731,6 +751,16 @@ def _storage_from_foolscap_plugin(node_config, config, announcement, get_rref): raise AnnouncementNotMatched() +def _available_space_from_version(version): + if version is None: + return None + protocol_v1_version = version.get(b'http://allmydata.org/tahoe/protocols/storage/v1', BytesKeyDict()) + available_space = protocol_v1_version.get(b'available-space') + if available_space is None: + available_space = protocol_v1_version.get(b'maximum-immutable-share-size', None) + return available_space + + @implementer(IServer) class NativeStorageServer(service.MultiService): """I hold information about a storage server that we want to connect to. @@ -910,13 +940,7 @@ class NativeStorageServer(service.MultiService): def get_available_space(self): version = self.get_version() - if version is None: - return None - protocol_v1_version = version.get(b'http://allmydata.org/tahoe/protocols/storage/v1', BytesKeyDict()) - available_space = protocol_v1_version.get(b'available-space') - if available_space is None: - available_space = protocol_v1_version.get(b'maximum-immutable-share-size', None) - return available_space + return _available_space_from_version(version) def start_connecting(self, trigger_cb): self._tub = self._tub_maker(self._handler_overrides) @@ -978,6 +1002,164 @@ class NativeStorageServer(service.MultiService): # used when the broker wants us to hurry up self._reconnector.reset() + +@implementer(IServer) +class HTTPNativeStorageServer(service.MultiService): + """ + Like ``NativeStorageServer``, but for HTTP clients. + + The notion of being "connected" is less meaningful for HTTP; we just poll + occasionally, and if we've succeeded at last poll, we assume we're + "connected". + """ + + def __init__(self, server_id: bytes, announcement, reactor=reactor): + service.MultiService.__init__(self) + assert isinstance(server_id, bytes) + self._server_id = server_id + self.announcement = announcement + self._on_status_changed = ObserverList() + self._reactor = reactor + furl = announcement["anonymous-storage-FURL"].encode("utf-8") + ( + self._nickname, + self._permutation_seed, + self._tubid, + self._short_description, + self._long_description + ) = _parse_announcement(server_id, furl, announcement) + # TODO need some way to do equivalent of Happy Eyeballs for multiple NURLs? + # https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3935 + nurl = DecodedURL.from_text(announcement[ANONYMOUS_STORAGE_NURLS][0]) + self._istorage_server = _HTTPStorageServer.from_http_client( + StorageClient.from_nurl(nurl, reactor) + ) + + self._connection_status = connection_status.ConnectionStatus.unstarted() + self._version = None + self._last_connect_time = None + self._connecting_deferred = None + + def get_permutation_seed(self): + return self._permutation_seed + + def get_name(self): + return self._short_description + + def get_longname(self): + return self._long_description + + def get_tubid(self): + return self._tubid + + def get_lease_seed(self): + # Apparently this is what Foolscap version above does?! + return self._tubid + + def get_foolscap_write_enabler_seed(self): + return self._tubid + + def get_nickname(self): + return self._nickname + + def on_status_changed(self, status_changed): + """ + :param status_changed: a callable taking a single arg (the + NativeStorageServer) that is notified when we become connected + """ + return self._on_status_changed.subscribe(status_changed) + + # Special methods used by copy.copy() and copy.deepcopy(). When those are + # used in allmydata.immutable.filenode to copy CheckResults during + # repair, we want it to treat the IServer instances as singletons, and + # not attempt to duplicate them.. + def __copy__(self): + return self + + def __deepcopy__(self, memodict): + return self + + def __repr__(self): + return "" % self.get_name() + + def get_serverid(self): + return self._server_id + + def get_version(self): + return self._version + + def get_announcement(self): + return self.announcement + + def get_connection_status(self): + return self._connection_status + + def is_connected(self): + return self._connection_status.connected + + def get_available_space(self): + version = self.get_version() + return _available_space_from_version(version) + + def start_connecting(self, trigger_cb): + self._lc = LoopingCall(self._connect) + self._lc.start(1, True) + + def _got_version(self, version): + self._last_connect_time = time.time() + self._version = version + self._connection_status = connection_status.ConnectionStatus( + True, "connected", [], self._last_connect_time, self._last_connect_time + ) + self._on_status_changed.notify(self) + + def _failed_to_connect(self, reason): + self._connection_status = connection_status.ConnectionStatus( + False, f"failure: {reason}", [], self._last_connect_time, self._last_connect_time + ) + self._on_status_changed.notify(self) + + def get_storage_server(self): + """ + See ``IServer.get_storage_server``. + """ + if self._connection_status.summary == "unstarted": + return None + return self._istorage_server + + def stop_connecting(self): + self._lc.stop() + if self._connecting_deferred is not None: + self._connecting_deferred.cancel() + + def try_to_connect(self): + self._connect() + + def _connect(self): + result = self._istorage_server.get_version() + + def remove_connecting_deferred(result): + self._connecting_deferred = None + return result + + # Set a short timeout since we're relying on this for server liveness. + self._connecting_deferred = result.addTimeout(5, self._reactor).addBoth( + remove_connecting_deferred).addCallbacks( + self._got_version, + self._failed_to_connect + ) + + def stopService(self): + if self._connecting_deferred is not None: + self._connecting_deferred.cancel() + + result = service.MultiService.stopService(self) + if self._lc.running: + self._lc.stop() + self._failed_to_connect("shut down") + return result + + class UnknownServerTypeError(Exception): pass @@ -1094,7 +1276,7 @@ class _StorageServer(object): -@attr.s +@attr.s(hash=True) class _FakeRemoteReference(object): """ Emulate a Foolscap RemoteReference, calling a local object instead. @@ -1119,7 +1301,7 @@ class _HTTPBucketWriter(object): storage_index = attr.ib(type=bytes) share_number = attr.ib(type=int) upload_secret = attr.ib(type=bytes) - finished = attr.ib(type=bool, default=False) + finished = attr.ib(type=defer.Deferred[bool], factory=defer.Deferred) def abort(self): return self.client.abort_upload(self.storage_index, self.share_number, @@ -1131,18 +1313,27 @@ class _HTTPBucketWriter(object): self.storage_index, self.share_number, self.upload_secret, offset, data ) if result.finished: - self.finished = True + self.finished.callback(True) defer.returnValue(None) def close(self): - # A no-op in HTTP protocol. - if not self.finished: - return defer.fail(RuntimeError("You didn't finish writing?!")) - return defer.succeed(None) + # We're not _really_ closed until all writes have succeeded and we + # finished writing all the data. + return self.finished +def _ignore_404(failure: Failure) -> Union[Failure, None]: + """ + Useful for advise_corrupt_share(), since it swallows unknown share numbers + in Foolscap. + """ + if failure.check(HTTPClientException) and failure.value.code == http.NOT_FOUND: + return None + else: + return failure -@attr.s + +@attr.s(hash=True) class _HTTPBucketReader(object): """ Emulate a ``RIBucketReader``, but use HTTP protocol underneath. @@ -1160,7 +1351,7 @@ class _HTTPBucketReader(object): return self.client.advise_corrupt_share( self.storage_index, self.share_number, str(reason, "utf-8", errors="backslashreplace") - ) + ).addErrback(_ignore_404) # WORK IN PROGRESS, for now it doesn't actually implement whole thing. @@ -1260,7 +1451,7 @@ class _HTTPStorageServer(object): raise ValueError("Unknown share type") return client.advise_corrupt_share( storage_index, shnum, str(reason, "utf-8", errors="backslashreplace") - ) + ).addErrback(_ignore_404) @defer.inlineCallbacks def slot_readv(self, storage_index, shares, readv): diff --git a/src/allmydata/test/_win_subprocess.py b/src/allmydata/test/_win_subprocess.py deleted file mode 100644 index bf9767e73..000000000 --- a/src/allmydata/test/_win_subprocess.py +++ /dev/null @@ -1,210 +0,0 @@ -""" -This module is only necessary on Python 2. Once Python 2 code is dropped, it -can be deleted. -""" - -from future.utils import PY3 -if PY3: - raise RuntimeError("Just use subprocess.Popen") - -# This is necessary to pacify flake8 on Python 3, while we're still supporting -# Python 2. -from past.builtins import unicode - -# -*- coding: utf-8 -*- - -## Copyright (C) 2021 Valentin Lab -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions -## are met: -## -## 1. Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## -## 2. 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. -## -## 3. Neither the name of the copyright holder nor the names of its -## contributors may be used to endorse or promote products derived -## from this software without specific prior written permission. -## -## 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 OF THIS SOFTWARE, EVEN IF ADVISED -## OF THE POSSIBILITY OF SUCH DAMAGE. -## - -## issue: https://bugs.python.org/issue19264 - -# See allmydata/windows/fixups.py -import sys -assert sys.platform == "win32" - -import os -import ctypes -import subprocess -import _subprocess -from ctypes import byref, windll, c_char_p, c_wchar_p, c_void_p, \ - Structure, sizeof, c_wchar, WinError -from ctypes.wintypes import BYTE, WORD, LPWSTR, BOOL, DWORD, LPVOID, \ - HANDLE - - -## -## Types -## - -CREATE_UNICODE_ENVIRONMENT = 0x00000400 -LPCTSTR = c_char_p -LPTSTR = c_wchar_p -LPSECURITY_ATTRIBUTES = c_void_p -LPBYTE = ctypes.POINTER(BYTE) - -class STARTUPINFOW(Structure): - _fields_ = [ - ("cb", DWORD), ("lpReserved", LPWSTR), - ("lpDesktop", LPWSTR), ("lpTitle", LPWSTR), - ("dwX", DWORD), ("dwY", DWORD), - ("dwXSize", DWORD), ("dwYSize", DWORD), - ("dwXCountChars", DWORD), ("dwYCountChars", DWORD), - ("dwFillAtrribute", DWORD), ("dwFlags", DWORD), - ("wShowWindow", WORD), ("cbReserved2", WORD), - ("lpReserved2", LPBYTE), ("hStdInput", HANDLE), - ("hStdOutput", HANDLE), ("hStdError", HANDLE), - ] - -LPSTARTUPINFOW = ctypes.POINTER(STARTUPINFOW) - - -class PROCESS_INFORMATION(Structure): - _fields_ = [ - ("hProcess", HANDLE), ("hThread", HANDLE), - ("dwProcessId", DWORD), ("dwThreadId", DWORD), - ] - -LPPROCESS_INFORMATION = ctypes.POINTER(PROCESS_INFORMATION) - - -class DUMMY_HANDLE(ctypes.c_void_p): - - def __init__(self, *a, **kw): - super(DUMMY_HANDLE, self).__init__(*a, **kw) - self.closed = False - - def Close(self): - if not self.closed: - windll.kernel32.CloseHandle(self) - self.closed = True - - def __int__(self): - return self.value - - -CreateProcessW = windll.kernel32.CreateProcessW -CreateProcessW.argtypes = [ - LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, - LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPCTSTR, - LPSTARTUPINFOW, LPPROCESS_INFORMATION, -] -CreateProcessW.restype = BOOL - - -## -## Patched functions/classes -## - -def CreateProcess(executable, args, _p_attr, _t_attr, - inherit_handles, creation_flags, env, cwd, - startup_info): - """Create a process supporting unicode executable and args for win32 - - Python implementation of CreateProcess using CreateProcessW for Win32 - - """ - - si = STARTUPINFOW( - dwFlags=startup_info.dwFlags, - wShowWindow=startup_info.wShowWindow, - cb=sizeof(STARTUPINFOW), - ## XXXvlab: not sure of the casting here to ints. - hStdInput=int(startup_info.hStdInput), - hStdOutput=int(startup_info.hStdOutput), - hStdError=int(startup_info.hStdError), - ) - - wenv = None - if env is not None: - ## LPCWSTR seems to be c_wchar_p, so let's say CWSTR is c_wchar - env = (unicode("").join([ - unicode("%s=%s\0") % (k, v) - for k, v in env.items()])) + unicode("\0") - wenv = (c_wchar * len(env))() - wenv.value = env - - pi = PROCESS_INFORMATION() - creation_flags |= CREATE_UNICODE_ENVIRONMENT - - if CreateProcessW(executable, args, None, None, - inherit_handles, creation_flags, - wenv, cwd, byref(si), byref(pi)): - return (DUMMY_HANDLE(pi.hProcess), DUMMY_HANDLE(pi.hThread), - pi.dwProcessId, pi.dwThreadId) - raise WinError() - - -class Popen(subprocess.Popen): - """This superseeds Popen and corrects a bug in cPython 2.7 implem""" - - def _execute_child(self, args, executable, preexec_fn, close_fds, - cwd, env, universal_newlines, - startupinfo, creationflags, shell, to_close, - p2cread, p2cwrite, - c2pread, c2pwrite, - errread, errwrite): - """Code from part of _execute_child from Python 2.7 (9fbb65e) - - There are only 2 little changes concerning the construction of - the the final string in shell mode: we preempt the creation of - the command string when shell is True, because original function - will try to encode unicode args which we want to avoid to be able to - sending it as-is to ``CreateProcess``. - - """ - if not isinstance(args, subprocess.types.StringTypes): - args = subprocess.list2cmdline(args) - - if startupinfo is None: - startupinfo = subprocess.STARTUPINFO() - if shell: - startupinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW - startupinfo.wShowWindow = _subprocess.SW_HIDE - comspec = os.environ.get("COMSPEC", unicode("cmd.exe")) - args = unicode('{} /c "{}"').format(comspec, args) - if (_subprocess.GetVersion() >= 0x80000000 or - os.path.basename(comspec).lower() == "command.com"): - w9xpopen = self._find_w9xpopen() - args = unicode('"%s" %s') % (w9xpopen, args) - creationflags |= _subprocess.CREATE_NEW_CONSOLE - - cp = _subprocess.CreateProcess - _subprocess.CreateProcess = CreateProcess - try: - super(Popen, self)._execute_child( - args, executable, - preexec_fn, close_fds, cwd, env, universal_newlines, - startupinfo, creationflags, False, to_close, p2cread, - p2cwrite, c2pread, c2pwrite, errread, errwrite, - ) - finally: - _subprocess.CreateProcess = cp diff --git a/src/allmydata/test/cli/test_put.py b/src/allmydata/test/cli/test_put.py index 03306ab71..c5f32a553 100644 --- a/src/allmydata/test/cli/test_put.py +++ b/src/allmydata/test/cli/test_put.py @@ -1,19 +1,18 @@ """ -Ported to Python 3. +Tests for the ``tahoe put`` CLI tool. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations +from typing import Callable, Awaitable, TypeVar, Any import os.path from twisted.trial import unittest from twisted.python import usage +from twisted.python.filepath import FilePath +from cryptography.hazmat.primitives.serialization import load_pem_private_key + +from allmydata.crypto.rsa import PrivateKey +from allmydata.uri import from_string from allmydata.util import fileutil from allmydata.scripts.common import get_aliases from allmydata.scripts import cli @@ -22,6 +21,9 @@ from ..common_util import skip_if_cannot_represent_filename from allmydata.util.encodingutil import get_io_encoding from allmydata.util.fileutil import abspath_expanduser_unicode from .common import CLITestMixin +from allmydata.mutable.common import derive_mutable_keys + +T = TypeVar("T") class Put(GridTestMixin, CLITestMixin, unittest.TestCase): @@ -215,6 +217,65 @@ class Put(GridTestMixin, CLITestMixin, unittest.TestCase): return d + async def test_unlinked_mutable_specified_private_key(self) -> None: + """ + A new unlinked mutable can be created using a specified private + key. + """ + self.basedir = "cli/Put/unlinked-mutable-with-key" + await self._test_mutable_specified_key( + lambda do_cli, pempath, datapath: do_cli( + "put", "--mutable", "--private-key-path", pempath.path, + stdin=datapath.getContent(), + ), + ) + + async def test_linked_mutable_specified_private_key(self) -> None: + """ + A new linked mutable can be created using a specified private key. + """ + self.basedir = "cli/Put/linked-mutable-with-key" + await self._test_mutable_specified_key( + lambda do_cli, pempath, datapath: do_cli( + "put", "--mutable", "--private-key-path", pempath.path, datapath.path, + ), + ) + + async def _test_mutable_specified_key( + self, + run: Callable[[Any, FilePath, FilePath], Awaitable[tuple[int, bytes, bytes]]], + ) -> None: + """ + A helper for testing mutable creation. + + :param run: A function to do the creation. It is called with + ``self.do_cli`` and the path to a private key PEM file and a data + file. It returns whatever ``do_cli`` returns. + """ + self.set_up_grid(oneshare=True) + + pempath = FilePath(__file__).parent().sibling("data").child("openssl-rsa-2048.txt") + datapath = FilePath(self.basedir).child("data") + datapath.setContent(b"Hello world" * 1024) + + (rc, out, err) = await run(self.do_cli, pempath, datapath) + self.assertEqual(rc, 0, (out, err)) + cap = from_string(out.strip()) + # The capability is derived from the key we specified. + privkey = load_pem_private_key(pempath.getContent(), password=None) + assert isinstance(privkey, PrivateKey) + pubkey = privkey.public_key() + writekey, _, fingerprint = derive_mutable_keys((pubkey, privkey)) + self.assertEqual( + (writekey, fingerprint), + (cap.writekey, cap.fingerprint), + ) + # Also the capability we were given actually refers to the data we + # uploaded. + (rc, out, err) = await self.do_cli("get", out.strip()) + self.assertEqual(rc, 0, (out, err)) + self.assertEqual(out, datapath.getContent().decode("ascii")) + def test_mutable(self): # echo DATA1 | tahoe put --mutable - uploaded.txt # echo DATA2 | tahoe put - uploaded.txt # should modify-in-place diff --git a/src/allmydata/test/common.py b/src/allmydata/test/common.py index b652b2e48..db2921e86 100644 --- a/src/allmydata/test/common.py +++ b/src/allmydata/test/common.py @@ -1,14 +1,8 @@ """ -Ported to Python 3. +Functionality related to a lot of the test suite. """ -from __future__ import print_function -from __future__ import absolute_import -from __future__ import division -from __future__ import unicode_literals +from __future__ import annotations -from future.utils import PY2, native_str -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 from past.builtins import chr as byteschr __all__ = [ @@ -111,25 +105,15 @@ from allmydata.scripts.common import ( from ..crypto import ( ed25519, + rsa, ) from .eliotutil import ( EliotLoggedRunTest, ) from .common_util import ShouldFailMixin # noqa: F401 -if sys.platform == "win32" and PY2: - # Python 2.7 doesn't have good options for launching a process with - # non-ASCII in its command line. So use this alternative that does a - # better job. However, only use it on Windows because it doesn't work - # anywhere else. - from ._win_subprocess import ( - Popen, - ) -else: - from subprocess import ( - Popen, - ) from subprocess import ( + Popen, PIPE, ) @@ -298,7 +282,7 @@ class UseNode(object): plugin_config = attr.ib() storage_plugin = attr.ib() basedir = attr.ib(validator=attr.validators.instance_of(FilePath)) - introducer_furl = attr.ib(validator=attr.validators.instance_of(native_str), + introducer_furl = attr.ib(validator=attr.validators.instance_of(str), converter=six.ensure_str) node_config = attr.ib(default=attr.Factory(dict)) @@ -639,15 +623,28 @@ class FakeMutableFileNode(object): # type: ignore # incomplete implementation MUTABLE_SIZELIMIT = 10000 - def __init__(self, storage_broker, secret_holder, - default_encoding_parameters, history, all_contents): + _public_key: rsa.PublicKey | None + _private_key: rsa.PrivateKey | None + + def __init__(self, + storage_broker, + secret_holder, + default_encoding_parameters, + history, + all_contents, + keypair: tuple[rsa.PublicKey, rsa.PrivateKey] | None + ): self.all_contents = all_contents - self.file_types = {} # storage index => MDMF_VERSION or SDMF_VERSION - self.init_from_cap(make_mutable_file_cap()) + self.file_types: dict[bytes, int] = {} # storage index => MDMF_VERSION or SDMF_VERSION + self.init_from_cap(make_mutable_file_cap(keypair)) self._k = default_encoding_parameters['k'] self._segsize = default_encoding_parameters['max_segment_size'] - def create(self, contents, key_generator=None, keysize=None, - version=SDMF_VERSION): + if keypair is None: + self._public_key = self._private_key = None + else: + self._public_key, self._private_key = keypair + + def create(self, contents, version=SDMF_VERSION): if version == MDMF_VERSION and \ isinstance(self.my_uri, (uri.ReadonlySSKFileURI, uri.WriteableSSKFileURI)): @@ -843,9 +840,28 @@ class FakeMutableFileNode(object): # type: ignore # incomplete implementation return defer.succeed(consumer) -def make_mutable_file_cap(): - return uri.WriteableSSKFileURI(writekey=os.urandom(16), - fingerprint=os.urandom(32)) +def make_mutable_file_cap( + keypair: tuple[rsa.PublicKey, rsa.PrivateKey] | None = None, +) -> uri.WriteableSSKFileURI: + """ + Create a local representation of a mutable object. + + :param keypair: If None, a random keypair will be generated for the new + object. Otherwise, this is the keypair for that object. + """ + if keypair is None: + writekey = os.urandom(16) + fingerprint = os.urandom(32) + else: + pubkey, privkey = keypair + pubkey_s = rsa.der_string_from_verifying_key(pubkey) + privkey_s = rsa.der_string_from_signing_key(privkey) + writekey = hashutil.ssk_writekey_hash(privkey_s) + fingerprint = hashutil.ssk_pubkey_fingerprint_hash(pubkey_s) + + return uri.WriteableSSKFileURI( + writekey=writekey, fingerprint=fingerprint, + ) def make_mdmf_mutable_file_cap(): return uri.WriteableMDMFFileURI(writekey=os.urandom(16), @@ -875,7 +891,7 @@ def create_mutable_filenode(contents, mdmf=False, all_contents=None): encoding_params['max_segment_size'] = 128*1024 filenode = FakeMutableFileNode(None, None, encoding_params, None, - all_contents) + all_contents, None) filenode.init_from_cap(cap) if mdmf: filenode.create(MutableData(contents), version=MDMF_VERSION) diff --git a/src/allmydata/test/common_system.py b/src/allmydata/test/common_system.py index 9851d2b91..01966824a 100644 --- a/src/allmydata/test/common_system.py +++ b/src/allmydata/test/common_system.py @@ -5,22 +5,14 @@ in ``allmydata.test.test_system``. Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - # Don't import bytes since it causes issues on (so far unported) modules on Python 2. - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, dict, list, object, range, max, min, str # noqa: F401 - +from typing import Optional import os from functools import partial from twisted.internet import reactor from twisted.internet import defer from twisted.internet.defer import inlineCallbacks +from twisted.internet.task import deferLater from twisted.application import service from foolscap.api import flushEventualQueue @@ -28,6 +20,12 @@ from foolscap.api import flushEventualQueue from allmydata import client from allmydata.introducer.server import create_introducer from allmydata.util import fileutil, log, pollmixin +from allmydata.util.deferredutil import async_to_deferred +from allmydata.storage import http_client +from allmydata.storage_client import ( + NativeStorageServer, + HTTPNativeStorageServer, +) from twisted.python.filepath import ( FilePath, @@ -642,9 +640,51 @@ def _render_section_values(values): )) +@async_to_deferred +async def spin_until_cleanup_done(value=None, timeout=10): + """ + At the end of the test, spin until the reactor has no more DelayedCalls + and file descriptors (or equivalents) registered. This prevents dirty + reactor errors, while also not hard-coding a fixed amount of time, so it + can finish faster on faster computers. + + There is also a timeout: if it takes more than 10 seconds (by default) for + the remaining reactor state to clean itself up, the presumption is that it + will never get cleaned up and the spinning stops. + + Make sure to run as last thing in tearDown. + """ + def num_fds(): + if hasattr(reactor, "handles"): + # IOCP! + return len(reactor.handles) + else: + # Normal reactor; having internal readers still registered is fine, + # that's not our code. + return len( + set(reactor.getReaders()) - set(reactor._internalReaders) + ) + len(reactor.getWriters()) + + for i in range(timeout * 1000): + # There's a single DelayedCall for AsynchronousDeferredRunTest's + # timeout... + if (len(reactor.getDelayedCalls()) < 2 and num_fds() == 0): + break + await deferLater(reactor, 0.001) + return value + + class SystemTestMixin(pollmixin.PollMixin, testutil.StallMixin): + # If set to True, use Foolscap for storage protocol. If set to False, HTTP + # will be used when possible. If set to None, this suggests a bug in the + # test code. + FORCE_FOOLSCAP_FOR_STORAGE : Optional[bool] = None + def setUp(self): + self._http_client_pools = [] + http_client.StorageClient.start_test_mode(self._got_new_http_connection_pool) + self.addCleanup(http_client.StorageClient.stop_test_mode) self.port_assigner = SameProcessStreamEndpointAssigner() self.port_assigner.setUp() self.addCleanup(self.port_assigner.tearDown) @@ -652,10 +692,35 @@ class SystemTestMixin(pollmixin.PollMixin, testutil.StallMixin): self.sparent = service.MultiService() self.sparent.startService() + def _got_new_http_connection_pool(self, pool): + # Register the pool for shutdown later: + self._http_client_pools.append(pool) + # Disable retries: + pool.retryAutomatically = False + # Make a much more aggressive timeout for connections, we're connecting + # locally after all... and also make sure it's lower than the delay we + # add in tearDown, to prevent dirty reactor issues. + getConnection = pool.getConnection + + def getConnectionWithTimeout(*args, **kwargs): + d = getConnection(*args, **kwargs) + d.addTimeout(1, reactor) + return d + + pool.getConnection = getConnectionWithTimeout + + def close_idle_http_connections(self): + """Close all HTTP client connections that are just hanging around.""" + return defer.gatherResults( + [pool.closeCachedConnections() for pool in self._http_client_pools] + ) + def tearDown(self): log.msg("shutting down SystemTest services") d = self.sparent.stopService() d.addBoth(flush_but_dont_ignore) + d.addBoth(lambda x: self.close_idle_http_connections().addCallback(lambda _: x)) + d.addBoth(spin_until_cleanup_done) return d def getdir(self, subdir): @@ -714,21 +779,31 @@ class SystemTestMixin(pollmixin.PollMixin, testutil.StallMixin): :return: A ``Deferred`` that fires when the nodes have connected to each other. """ + self.assertIn( + self.FORCE_FOOLSCAP_FOR_STORAGE, (True, False), + "You forgot to set FORCE_FOOLSCAP_FOR_STORAGE on {}".format(self.__class__) + ) self.numclients = NUMCLIENTS self.introducer = yield self._create_introducer() self.add_service(self.introducer) self.introweb_url = self._get_introducer_web() - yield self._set_up_client_nodes() + yield self._set_up_client_nodes(self.FORCE_FOOLSCAP_FOR_STORAGE) + native_server = next(iter(self.clients[0].storage_broker.get_known_servers())) + if self.FORCE_FOOLSCAP_FOR_STORAGE: + expected_storage_server_class = NativeStorageServer + else: + expected_storage_server_class = HTTPNativeStorageServer + self.assertIsInstance(native_server, expected_storage_server_class) @inlineCallbacks - def _set_up_client_nodes(self): + def _set_up_client_nodes(self, force_foolscap): q = self.introducer self.introducer_furl = q.introducer_url self.clients = [] basedirs = [] for i in range(self.numclients): - basedirs.append((yield self._set_up_client_node(i))) + basedirs.append((yield self._set_up_client_node(i, force_foolscap))) # start clients[0], wait for it's tub to be ready (at which point it # will have registered the helper furl). @@ -761,7 +836,7 @@ class SystemTestMixin(pollmixin.PollMixin, testutil.StallMixin): # and the helper-using webport self.helper_webish_url = self.clients[3].getServiceNamed("webish").getURL() - def _generate_config(self, which, basedir): + def _generate_config(self, which, basedir, force_foolscap=False): config = {} allclients = set(range(self.numclients)) @@ -791,6 +866,7 @@ class SystemTestMixin(pollmixin.PollMixin, testutil.StallMixin): sethelper = partial(setconf, config, which, "helper") setnode("nickname", u"client %d \N{BLACK SMILING FACE}" % (which,)) + setconf(config, which, "storage", "force_foolscap", str(force_foolscap)) tub_location_hint, tub_port_endpoint = self.port_assigner.assign(reactor) setnode("tub.port", tub_port_endpoint) @@ -808,17 +884,16 @@ class SystemTestMixin(pollmixin.PollMixin, testutil.StallMixin): " furl: %s\n") % self.introducer_furl iyaml_fn = os.path.join(basedir, "private", "introducers.yaml") fileutil.write(iyaml_fn, iyaml) - return _render_config(config) - def _set_up_client_node(self, which): + def _set_up_client_node(self, which, force_foolscap): basedir = self.getdir("client%d" % (which,)) fileutil.make_dirs(os.path.join(basedir, "private")) if len(SYSTEM_TEST_CERTS) > (which + 1): f = open(os.path.join(basedir, "private", "node.pem"), "w") f.write(SYSTEM_TEST_CERTS[which + 1]) f.close() - config = self._generate_config(which, basedir) + config = self._generate_config(which, basedir, force_foolscap) fileutil.write(os.path.join(basedir, 'tahoe.cfg'), config) return basedir diff --git a/src/allmydata/test/data/openssl-rsa-2048.txt b/src/allmydata/test/data/openssl-rsa-2048.txt new file mode 100644 index 000000000..8f989f42c --- /dev/null +++ b/src/allmydata/test/data/openssl-rsa-2048.txt @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDF1MeXulDWFO05 +YXCh8aqNc1dS1ddJRzsti4BOWuDOepUc0oCaSIcC5aR7XJ+vhX7a02mTIwvLcuEH +8sxx0BJU4jCDpRI6aAqaKJxwZx1e6AcVFJDl7vzymhvWhqHuKh0jTvwM2zONWTwV +V8m2PbDdxu0Prwdx+Mt2sDT6xHEhJj5fI/GUDUEdkhLJF6DQSulFRqqd0qP7qcI9 +fSHZbM7MywfzqFUe8J1+tk4fBh2v7gNzN1INpzh2mDtLPAtxr4ZPtEb/0D0U4PsP +CniOHP0U8sF3VY0+K5qoCQr92cLRJvT/vLpQGVNUTFdFrtbqDoFxUCyEH4FUqRDX +2mVrPo2xAgMBAAECggEAA0Ev1y5/1NTPbgytBeIIH3d+v9hwKDbHecVoMwnOVeFJ +BZpONrOToovhAc1NXH2wj4SvwYWfpJ1HR9piDAuLeKlnuUu4ffzfE0gQok4E+v4r +2yg9ZcYBs/NOetAYVwbq960tiv/adFRr71E0WqbfS3fBx8q2L3Ujkkhd98PudUhQ +izbrTvkT7q00OPCWGwgWepMlLEowUWwZehGI0MlbONg7SbRraZZmG586Iy0tpC3e +AM7wC1/ORzFqcRgTIxXizQ5RHL7S0OQPLhbEJbuwPonNjze3p0EP4wNBELZTaVOd +xeA22Py4Bh/d1q3aEgbwR7tLyA8YfEzshTaY6oV8AQKBgQD0uFo8pyWk0AWXfjzn +jV4yYyPWy8pJA6YfAJAST8m7B/JeYgGlfHxTlNZiB40DsJq08tOZv3HAubgMpFIa +reuDxPqo6/Quwdy4Syu+AFhY48KIuwuoegG/L+5qcQLE69r1w71ZV6wUvLmXYX2I +Y6nYz+OdpD1JrMIr6Js60XURsQKBgQDO8yWl7ufIDKMbQpbs0PgUQsH4FtzGcP4J +j/7/8GfhKYt6rPsrojPHUbAi1+25xBVOuhm0Zx2ku2t+xPIMJoS+15EcER1Z2iHZ +Zci9UGpJpUxGcUhG7ETF1HZv0xKHcEOl9eIIOcAP9Vd9DqnGk85gy6ti6MHe/5Tn +IMD36OQ8AQKBgQDwqE7NMM67KnslRNaeG47T3F0FQbm3XehCuqnz6BUJYcI+gQD/ +fdFB3K+LDcPmKgmqAtaGbxdtoPXXMM0xQXHHTrH15rxmMu1dK0dj/TDkkW7gSZko +YHtRSdCbSnGfuBXG9GxD7QzkA8g7j3sE4oXIGoDLqRVAW61DwubMy+jlsQKBgGNB ++Zepi1/Gt+BWQt8YpzPIhRIBnShMf3uEphCJdLlo3K4dE2btKBp8UpeTq0CDDJky +5ytAndYp0jf+K/2p59dEuyOUDdjPp5aGnA446JGkB35tzPW/Uoj0C049FVEChl+u +HBhH4peE285uXv2QXNbOOMh6zKmxOfDVI9iDyhwBAoGBAIXq2Ar0zDXXaL3ncEKo +pXt9BZ8OpJo2pvB1t2VPePOwEQ0wdT+H62fKNY47NiF9+LyS541/ps5Qhv6AmiKJ +Z7I0Vb6+sxQljYH/LNW+wc2T/pIAi/7sNcmnlBtZfoVwt99bk2CyoRALPLWHYCkh +c7Tty2bZzDZy6aCX+FGRt5N/ +-----END PRIVATE KEY----- diff --git a/src/allmydata/test/mutable/test_filenode.py b/src/allmydata/test/mutable/test_filenode.py index 579734433..6c00e4420 100644 --- a/src/allmydata/test/mutable/test_filenode.py +++ b/src/allmydata/test/mutable/test_filenode.py @@ -30,6 +30,7 @@ from allmydata.mutable.publish import MutableData from ..test_download import PausingConsumer, PausingAndStoppingConsumer, \ StoppingConsumer, ImmediatelyStoppingConsumer from .. import common_util as testutil +from ...crypto.rsa import create_signing_keypair from .util import ( FakeStorage, make_nodemaker_with_peers, @@ -65,6 +66,16 @@ class Filenode(AsyncBrokenTestCase, testutil.ShouldFailMixin): d.addCallback(_created) return d + async def test_create_with_keypair(self): + """ + An SDMF can be created using a given keypair. + """ + (priv, pub) = create_signing_keypair(2048) + node = await self.nodemaker.create_mutable_file(keypair=(pub, priv)) + self.assertThat( + (node.get_privkey(), node.get_pubkey()), + Equals((priv, pub)), + ) def test_create_mdmf(self): d = self.nodemaker.create_mutable_file(version=MDMF_VERSION) diff --git a/src/allmydata/test/mutable/test_version.py b/src/allmydata/test/mutable/test_version.py index d5c44f204..87050424b 100644 --- a/src/allmydata/test/mutable/test_version.py +++ b/src/allmydata/test/mutable/test_version.py @@ -1,19 +1,12 @@ """ -Ported to Python 3. +Tests related to the way ``allmydata.mutable`` handles different versions +of data for an object. """ -from __future__ import print_function -from __future__ import absolute_import -from __future__ import division -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from io import StringIO import os -from six.moves import cStringIO as StringIO +from typing import Optional -from twisted.internet import defer from ..common import AsyncTestCase from testtools.matchers import ( Equals, @@ -47,343 +40,268 @@ class Version(GridTestMixin, AsyncTestCase, testutil.ShouldFailMixin, \ self.small_data = b"test data" * 10 # 90 B; SDMF - def do_upload_mdmf(self, data=None): + async def do_upload_mdmf(self, data: Optional[bytes] = None) -> MutableFileNode: if data is None: data = self.data - d = self.nm.create_mutable_file(MutableData(data), - version=MDMF_VERSION) - def _then(n): - self.assertThat(n, IsInstance(MutableFileNode)) - self.assertThat(n._protocol_version, Equals(MDMF_VERSION)) - self.mdmf_node = n - return n - d.addCallback(_then) - return d + n = await self.nm.create_mutable_file(MutableData(data), + version=MDMF_VERSION) + self.assertThat(n, IsInstance(MutableFileNode)) + self.assertThat(n._protocol_version, Equals(MDMF_VERSION)) + self.mdmf_node = n + return n - def do_upload_sdmf(self, data=None): + async def do_upload_sdmf(self, data: Optional[bytes] = None) -> MutableFileNode: if data is None: data = self.small_data - d = self.nm.create_mutable_file(MutableData(data)) - def _then(n): - self.assertThat(n, IsInstance(MutableFileNode)) - self.assertThat(n._protocol_version, Equals(SDMF_VERSION)) - self.sdmf_node = n - return n - d.addCallback(_then) - return d + n = await self.nm.create_mutable_file(MutableData(data)) + self.assertThat(n, IsInstance(MutableFileNode)) + self.assertThat(n._protocol_version, Equals(SDMF_VERSION)) + self.sdmf_node = n + return n - def do_upload_empty_sdmf(self): - d = self.nm.create_mutable_file(MutableData(b"")) - def _then(n): - self.assertThat(n, IsInstance(MutableFileNode)) - self.sdmf_zero_length_node = n - self.assertThat(n._protocol_version, Equals(SDMF_VERSION)) - return n - d.addCallback(_then) - return d + async def do_upload_empty_sdmf(self) -> MutableFileNode: + n = await self.nm.create_mutable_file(MutableData(b"")) + self.assertThat(n, IsInstance(MutableFileNode)) + self.sdmf_zero_length_node = n + self.assertThat(n._protocol_version, Equals(SDMF_VERSION)) + return n - def do_upload(self): - d = self.do_upload_mdmf() - d.addCallback(lambda ign: self.do_upload_sdmf()) - return d + async def do_upload(self) -> MutableFileNode: + await self.do_upload_mdmf() + return await self.do_upload_sdmf() - def test_debug(self): - d = self.do_upload_mdmf() - def _debug(n): - fso = debug.FindSharesOptions() - storage_index = base32.b2a(n.get_storage_index()) - fso.si_s = str(storage_index, "utf-8") # command-line options are unicode on Python 3 - fso.nodedirs = [os.path.dirname(abspath_expanduser_unicode(str(storedir))) - for (i,ss,storedir) - in self.iterate_servers()] - fso.stdout = StringIO() - fso.stderr = StringIO() - debug.find_shares(fso) - sharefiles = fso.stdout.getvalue().splitlines() - expected = self.nm.default_encoding_parameters["n"] - self.assertThat(sharefiles, HasLength(expected)) + async def test_debug(self) -> None: + n = await self.do_upload_mdmf() + fso = debug.FindSharesOptions() + storage_index = base32.b2a(n.get_storage_index()) + fso.si_s = str(storage_index, "utf-8") # command-line options are unicode on Python 3 + fso.nodedirs = [os.path.dirname(abspath_expanduser_unicode(str(storedir))) + for (i,ss,storedir) + in self.iterate_servers()] + fso.stdout = StringIO() + fso.stderr = StringIO() + debug.find_shares(fso) + sharefiles = fso.stdout.getvalue().splitlines() + expected = self.nm.default_encoding_parameters["n"] + self.assertThat(sharefiles, HasLength(expected)) - do = debug.DumpOptions() - do["filename"] = sharefiles[0] - do.stdout = StringIO() - debug.dump_share(do) - output = do.stdout.getvalue() - lines = set(output.splitlines()) - self.assertTrue("Mutable slot found:" in lines, output) - self.assertTrue(" share_type: MDMF" in lines, output) - self.assertTrue(" num_extra_leases: 0" in lines, output) - self.assertTrue(" MDMF contents:" in lines, output) - self.assertTrue(" seqnum: 1" in lines, output) - self.assertTrue(" required_shares: 3" in lines, output) - self.assertTrue(" total_shares: 10" in lines, output) - self.assertTrue(" segsize: 131073" in lines, output) - self.assertTrue(" datalen: %d" % len(self.data) in lines, output) - vcap = str(n.get_verify_cap().to_string(), "utf-8") - self.assertTrue(" verify-cap: %s" % vcap in lines, output) - cso = debug.CatalogSharesOptions() - cso.nodedirs = fso.nodedirs - cso.stdout = StringIO() - cso.stderr = StringIO() - debug.catalog_shares(cso) - shares = cso.stdout.getvalue().splitlines() - oneshare = shares[0] # all shares should be MDMF - self.failIf(oneshare.startswith("UNKNOWN"), oneshare) - self.assertTrue(oneshare.startswith("MDMF"), oneshare) - fields = oneshare.split() - self.assertThat(fields[0], Equals("MDMF")) - self.assertThat(fields[1].encode("ascii"), Equals(storage_index)) - self.assertThat(fields[2], Equals("3/10")) - self.assertThat(fields[3], Equals("%d" % len(self.data))) - self.assertTrue(fields[4].startswith("#1:"), fields[3]) - # the rest of fields[4] is the roothash, which depends upon - # encryption salts and is not constant. fields[5] is the - # remaining time on the longest lease, which is timing dependent. - # The rest of the line is the quoted pathname to the share. - d.addCallback(_debug) - return d + do = debug.DumpOptions() + do["filename"] = sharefiles[0] + do.stdout = StringIO() + debug.dump_share(do) + output = do.stdout.getvalue() + lines = set(output.splitlines()) + self.assertTrue("Mutable slot found:" in lines, output) + self.assertTrue(" share_type: MDMF" in lines, output) + self.assertTrue(" num_extra_leases: 0" in lines, output) + self.assertTrue(" MDMF contents:" in lines, output) + self.assertTrue(" seqnum: 1" in lines, output) + self.assertTrue(" required_shares: 3" in lines, output) + self.assertTrue(" total_shares: 10" in lines, output) + self.assertTrue(" segsize: 131073" in lines, output) + self.assertTrue(" datalen: %d" % len(self.data) in lines, output) + vcap = str(n.get_verify_cap().to_string(), "utf-8") + self.assertTrue(" verify-cap: %s" % vcap in lines, output) + cso = debug.CatalogSharesOptions() + cso.nodedirs = fso.nodedirs + cso.stdout = StringIO() + cso.stderr = StringIO() + debug.catalog_shares(cso) + shares = cso.stdout.getvalue().splitlines() + oneshare = shares[0] # all shares should be MDMF + self.failIf(oneshare.startswith("UNKNOWN"), oneshare) + self.assertTrue(oneshare.startswith("MDMF"), oneshare) + fields = oneshare.split() + self.assertThat(fields[0], Equals("MDMF")) + self.assertThat(fields[1].encode("ascii"), Equals(storage_index)) + self.assertThat(fields[2], Equals("3/10")) + self.assertThat(fields[3], Equals("%d" % len(self.data))) + self.assertTrue(fields[4].startswith("#1:"), fields[3]) + # the rest of fields[4] is the roothash, which depends upon + # encryption salts and is not constant. fields[5] is the + # remaining time on the longest lease, which is timing dependent. + # The rest of the line is the quoted pathname to the share. + + async def test_get_sequence_number(self) -> None: + await self.do_upload() + bv = await self.mdmf_node.get_best_readable_version() + self.assertThat(bv.get_sequence_number(), Equals(1)) + bv = await self.sdmf_node.get_best_readable_version() + self.assertThat(bv.get_sequence_number(), Equals(1)) - def test_get_sequence_number(self): - d = self.do_upload() - d.addCallback(lambda ign: self.mdmf_node.get_best_readable_version()) - d.addCallback(lambda bv: - self.assertThat(bv.get_sequence_number(), Equals(1))) - d.addCallback(lambda ignored: - self.sdmf_node.get_best_readable_version()) - d.addCallback(lambda bv: - self.assertThat(bv.get_sequence_number(), Equals(1))) # Now update. The sequence number in both cases should be 1 in # both cases. - def _do_update(ignored): - new_data = MutableData(b"foo bar baz" * 100000) - new_small_data = MutableData(b"foo bar baz" * 10) - d1 = self.mdmf_node.overwrite(new_data) - d2 = self.sdmf_node.overwrite(new_small_data) - dl = gatherResults([d1, d2]) - return dl - d.addCallback(_do_update) - d.addCallback(lambda ignored: - self.mdmf_node.get_best_readable_version()) - d.addCallback(lambda bv: - self.assertThat(bv.get_sequence_number(), Equals(2))) - d.addCallback(lambda ignored: - self.sdmf_node.get_best_readable_version()) - d.addCallback(lambda bv: - self.assertThat(bv.get_sequence_number(), Equals(2))) - return d + new_data = MutableData(b"foo bar baz" * 100000) + new_small_data = MutableData(b"foo bar baz" * 10) + d1 = self.mdmf_node.overwrite(new_data) + d2 = self.sdmf_node.overwrite(new_small_data) + await gatherResults([d1, d2]) + bv = await self.mdmf_node.get_best_readable_version() + self.assertThat(bv.get_sequence_number(), Equals(2)) + bv = await self.sdmf_node.get_best_readable_version() + self.assertThat(bv.get_sequence_number(), Equals(2)) - - def test_cap_after_upload(self): + async def test_cap_after_upload(self) -> None: # If we create a new mutable file and upload things to it, and # it's an MDMF file, we should get an MDMF cap back from that # file and should be able to use that. # That's essentially what MDMF node is, so just check that. - d = self.do_upload_mdmf() - def _then(ign): - mdmf_uri = self.mdmf_node.get_uri() - cap = uri.from_string(mdmf_uri) - self.assertTrue(isinstance(cap, uri.WriteableMDMFFileURI)) - readonly_mdmf_uri = self.mdmf_node.get_readonly_uri() - cap = uri.from_string(readonly_mdmf_uri) - self.assertTrue(isinstance(cap, uri.ReadonlyMDMFFileURI)) - d.addCallback(_then) - return d + await self.do_upload_mdmf() + mdmf_uri = self.mdmf_node.get_uri() + cap = uri.from_string(mdmf_uri) + self.assertTrue(isinstance(cap, uri.WriteableMDMFFileURI)) + readonly_mdmf_uri = self.mdmf_node.get_readonly_uri() + cap = uri.from_string(readonly_mdmf_uri) + self.assertTrue(isinstance(cap, uri.ReadonlyMDMFFileURI)) - def test_mutable_version(self): + async def test_mutable_version(self) -> None: # assert that getting parameters from the IMutableVersion object # gives us the same data as getting them from the filenode itself - d = self.do_upload() - d.addCallback(lambda ign: self.mdmf_node.get_best_mutable_version()) - def _check_mdmf(bv): - n = self.mdmf_node - self.assertThat(bv.get_writekey(), Equals(n.get_writekey())) - self.assertThat(bv.get_storage_index(), Equals(n.get_storage_index())) - self.assertFalse(bv.is_readonly()) - d.addCallback(_check_mdmf) - d.addCallback(lambda ign: self.sdmf_node.get_best_mutable_version()) - def _check_sdmf(bv): - n = self.sdmf_node - self.assertThat(bv.get_writekey(), Equals(n.get_writekey())) - self.assertThat(bv.get_storage_index(), Equals(n.get_storage_index())) - self.assertFalse(bv.is_readonly()) - d.addCallback(_check_sdmf) - return d + await self.do_upload() + bv = await self.mdmf_node.get_best_mutable_version() + n = self.mdmf_node + self.assertThat(bv.get_writekey(), Equals(n.get_writekey())) + self.assertThat(bv.get_storage_index(), Equals(n.get_storage_index())) + self.assertFalse(bv.is_readonly()) + + bv = await self.sdmf_node.get_best_mutable_version() + n = self.sdmf_node + self.assertThat(bv.get_writekey(), Equals(n.get_writekey())) + self.assertThat(bv.get_storage_index(), Equals(n.get_storage_index())) + self.assertFalse(bv.is_readonly()) - def test_get_readonly_version(self): - d = self.do_upload() - d.addCallback(lambda ign: self.mdmf_node.get_best_readable_version()) - d.addCallback(lambda bv: self.assertTrue(bv.is_readonly())) + async def test_get_readonly_version(self) -> None: + await self.do_upload() + bv = await self.mdmf_node.get_best_readable_version() + self.assertTrue(bv.is_readonly()) # Attempting to get a mutable version of a mutable file from a # filenode initialized with a readcap should return a readonly # version of that same node. - d.addCallback(lambda ign: self.mdmf_node.get_readonly()) - d.addCallback(lambda ro: ro.get_best_mutable_version()) - d.addCallback(lambda v: self.assertTrue(v.is_readonly())) + ro = self.mdmf_node.get_readonly() + v = await ro.get_best_mutable_version() + self.assertTrue(v.is_readonly()) - d.addCallback(lambda ign: self.sdmf_node.get_best_readable_version()) - d.addCallback(lambda bv: self.assertTrue(bv.is_readonly())) + bv = await self.sdmf_node.get_best_readable_version() + self.assertTrue(bv.is_readonly()) - d.addCallback(lambda ign: self.sdmf_node.get_readonly()) - d.addCallback(lambda ro: ro.get_best_mutable_version()) - d.addCallback(lambda v: self.assertTrue(v.is_readonly())) - return d + ro = self.sdmf_node.get_readonly() + v = await ro.get_best_mutable_version() + self.assertTrue(v.is_readonly()) - def test_toplevel_overwrite(self): + async def test_toplevel_overwrite(self) -> None: new_data = MutableData(b"foo bar baz" * 100000) new_small_data = MutableData(b"foo bar baz" * 10) - d = self.do_upload() - d.addCallback(lambda ign: self.mdmf_node.overwrite(new_data)) - d.addCallback(lambda ignored: - self.mdmf_node.download_best_version()) - d.addCallback(lambda data: - self.assertThat(data, Equals(b"foo bar baz" * 100000))) - d.addCallback(lambda ignored: - self.sdmf_node.overwrite(new_small_data)) - d.addCallback(lambda ignored: - self.sdmf_node.download_best_version()) - d.addCallback(lambda data: - self.assertThat(data, Equals(b"foo bar baz" * 10))) - return d + await self.do_upload() + await self.mdmf_node.overwrite(new_data) + data = await self.mdmf_node.download_best_version() + self.assertThat(data, Equals(b"foo bar baz" * 100000)) + await self.sdmf_node.overwrite(new_small_data) + data = await self.sdmf_node.download_best_version() + self.assertThat(data, Equals(b"foo bar baz" * 10)) - def test_toplevel_modify(self): - d = self.do_upload() + async def test_toplevel_modify(self) -> None: + await self.do_upload() def modifier(old_contents, servermap, first_time): return old_contents + b"modified" - d.addCallback(lambda ign: self.mdmf_node.modify(modifier)) - d.addCallback(lambda ignored: - self.mdmf_node.download_best_version()) - d.addCallback(lambda data: - self.assertThat(data, Contains(b"modified"))) - d.addCallback(lambda ignored: - self.sdmf_node.modify(modifier)) - d.addCallback(lambda ignored: - self.sdmf_node.download_best_version()) - d.addCallback(lambda data: - self.assertThat(data, Contains(b"modified"))) - return d + await self.mdmf_node.modify(modifier) + data = await self.mdmf_node.download_best_version() + self.assertThat(data, Contains(b"modified")) + await self.sdmf_node.modify(modifier) + data = await self.sdmf_node.download_best_version() + self.assertThat(data, Contains(b"modified")) - def test_version_modify(self): + async def test_version_modify(self) -> None: # TODO: When we can publish multiple versions, alter this test # to modify a version other than the best usable version, then # test to see that the best recoverable version is that. - d = self.do_upload() + await self.do_upload() def modifier(old_contents, servermap, first_time): return old_contents + b"modified" - d.addCallback(lambda ign: self.mdmf_node.modify(modifier)) - d.addCallback(lambda ignored: - self.mdmf_node.download_best_version()) - d.addCallback(lambda data: - self.assertThat(data, Contains(b"modified"))) - d.addCallback(lambda ignored: - self.sdmf_node.modify(modifier)) - d.addCallback(lambda ignored: - self.sdmf_node.download_best_version()) - d.addCallback(lambda data: - self.assertThat(data, Contains(b"modified"))) - return d + await self.mdmf_node.modify(modifier) + data = await self.mdmf_node.download_best_version() + self.assertThat(data, Contains(b"modified")) + await self.sdmf_node.modify(modifier) + data = await self.sdmf_node.download_best_version() + self.assertThat(data, Contains(b"modified")) - def test_download_version(self): - d = self.publish_multiple() + async def test_download_version(self) -> None: + await self.publish_multiple() # We want to have two recoverable versions on the grid. - d.addCallback(lambda res: - self._set_versions({0:0,2:0,4:0,6:0,8:0, - 1:1,3:1,5:1,7:1,9:1})) + self._set_versions({0:0,2:0,4:0,6:0,8:0, + 1:1,3:1,5:1,7:1,9:1}) # Now try to download each version. We should get the plaintext # associated with that version. - d.addCallback(lambda ignored: - self._fn.get_servermap(mode=MODE_READ)) - def _got_servermap(smap): - versions = smap.recoverable_versions() - assert len(versions) == 2 + smap = await self._fn.get_servermap(mode=MODE_READ) + versions = smap.recoverable_versions() + assert len(versions) == 2 - self.servermap = smap - self.version1, self.version2 = versions - assert self.version1 != self.version2 + self.servermap = smap + self.version1, self.version2 = versions + assert self.version1 != self.version2 - self.version1_seqnum = self.version1[0] - self.version2_seqnum = self.version2[0] - self.version1_index = self.version1_seqnum - 1 - self.version2_index = self.version2_seqnum - 1 + self.version1_seqnum = self.version1[0] + self.version2_seqnum = self.version2[0] + self.version1_index = self.version1_seqnum - 1 + self.version2_index = self.version2_seqnum - 1 - d.addCallback(_got_servermap) - d.addCallback(lambda ignored: - self._fn.download_version(self.servermap, self.version1)) - d.addCallback(lambda results: - self.assertThat(self.CONTENTS[self.version1_index], - Equals(results))) - d.addCallback(lambda ignored: - self._fn.download_version(self.servermap, self.version2)) - d.addCallback(lambda results: - self.assertThat(self.CONTENTS[self.version2_index], - Equals(results))) - return d + results = await self._fn.download_version(self.servermap, self.version1) + self.assertThat(self.CONTENTS[self.version1_index], + Equals(results)) + results = await self._fn.download_version(self.servermap, self.version2) + self.assertThat(self.CONTENTS[self.version2_index], + Equals(results)) - def test_download_nonexistent_version(self): - d = self.do_upload_mdmf() - d.addCallback(lambda ign: self.mdmf_node.get_servermap(mode=MODE_WRITE)) - def _set_servermap(servermap): - self.servermap = servermap - d.addCallback(_set_servermap) - d.addCallback(lambda ignored: - self.shouldFail(UnrecoverableFileError, "nonexistent version", - None, - self.mdmf_node.download_version, self.servermap, - "not a version")) - return d + async def test_download_nonexistent_version(self) -> None: + await self.do_upload_mdmf() + servermap = await self.mdmf_node.get_servermap(mode=MODE_WRITE) + await self.shouldFail(UnrecoverableFileError, "nonexistent version", + None, + self.mdmf_node.download_version, servermap, + "not a version") - def _test_partial_read(self, node, expected, modes, step): - d = node.get_best_readable_version() + async def _test_partial_read(self, node, expected, modes, step) -> None: + version = await node.get_best_readable_version() for (name, offset, length) in modes: - d.addCallback(self._do_partial_read, name, expected, offset, length) + await self._do_partial_read(version, name, expected, offset, length) # then read the whole thing, but only a few bytes at a time, and see # that the results are what we expect. - def _read_data(version): - c = consumer.MemoryConsumer() - d2 = defer.succeed(None) - for i in range(0, len(expected), step): - d2.addCallback(lambda ignored, i=i: version.read(c, i, step)) - d2.addCallback(lambda ignored: - self.assertThat(expected, Equals(b"".join(c.chunks)))) - return d2 - d.addCallback(_read_data) - return d - - def _do_partial_read(self, version, name, expected, offset, length): c = consumer.MemoryConsumer() - d = version.read(c, offset, length) + for i in range(0, len(expected), step): + await version.read(c, i, step) + self.assertThat(expected, Equals(b"".join(c.chunks))) + + async def _do_partial_read(self, version, name, expected, offset, length) -> None: + c = consumer.MemoryConsumer() + await version.read(c, offset, length) if length is None: expected_range = expected[offset:] else: expected_range = expected[offset:offset+length] - d.addCallback(lambda ignored: b"".join(c.chunks)) - def _check(results): - if results != expected_range: - print("read([%d]+%s) got %d bytes, not %d" % \ - (offset, length, len(results), len(expected_range))) - print("got: %s ... %s" % (results[:20], results[-20:])) - print("exp: %s ... %s" % (expected_range[:20], expected_range[-20:])) - self.fail("results[%s] != expected_range" % name) - return version # daisy-chained to next call - d.addCallback(_check) - return d + results = b"".join(c.chunks) + if results != expected_range: + print("read([%d]+%s) got %d bytes, not %d" % \ + (offset, length, len(results), len(expected_range))) + print("got: %r ... %r" % (results[:20], results[-20:])) + print("exp: %r ... %r" % (expected_range[:20], expected_range[-20:])) + self.fail("results[%s] != expected_range" % name) - def test_partial_read_mdmf_0(self): + async def test_partial_read_mdmf_0(self) -> None: data = b"" - d = self.do_upload_mdmf(data=data) + result = await self.do_upload_mdmf(data=data) modes = [("all1", 0,0), ("all2", 0,None), ] - d.addCallback(self._test_partial_read, data, modes, 1) - return d + await self._test_partial_read(result, data, modes, 1) - def test_partial_read_mdmf_large(self): + async def test_partial_read_mdmf_large(self) -> None: segment_boundary = mathutil.next_multiple(128 * 1024, 3) modes = [("start_on_segment_boundary", segment_boundary, 50), ("ending_one_byte_after_segment_boundary", segment_boundary-50, 51), @@ -393,20 +311,18 @@ class Version(GridTestMixin, AsyncTestCase, testutil.ShouldFailMixin, \ ("complete_file1", 0, len(self.data)), ("complete_file2", 0, None), ] - d = self.do_upload_mdmf() - d.addCallback(self._test_partial_read, self.data, modes, 10000) - return d + result = await self.do_upload_mdmf() + await self._test_partial_read(result, self.data, modes, 10000) - def test_partial_read_sdmf_0(self): + async def test_partial_read_sdmf_0(self) -> None: data = b"" modes = [("all1", 0,0), ("all2", 0,None), ] - d = self.do_upload_sdmf(data=data) - d.addCallback(self._test_partial_read, data, modes, 1) - return d + result = await self.do_upload_sdmf(data=data) + await self._test_partial_read(result, data, modes, 1) - def test_partial_read_sdmf_2(self): + async def test_partial_read_sdmf_2(self) -> None: data = b"hi" modes = [("one_byte", 0, 1), ("last_byte", 1, 1), @@ -414,11 +330,10 @@ class Version(GridTestMixin, AsyncTestCase, testutil.ShouldFailMixin, \ ("complete_file", 0, 2), ("complete_file2", 0, None), ] - d = self.do_upload_sdmf(data=data) - d.addCallback(self._test_partial_read, data, modes, 1) - return d + result = await self.do_upload_sdmf(data=data) + await self._test_partial_read(result, data, modes, 1) - def test_partial_read_sdmf_90(self): + async def test_partial_read_sdmf_90(self) -> None: modes = [("start_at_middle", 50, 40), ("start_at_middle2", 50, None), ("zero_length_at_start", 0, 0), @@ -427,11 +342,10 @@ class Version(GridTestMixin, AsyncTestCase, testutil.ShouldFailMixin, \ ("complete_file1", 0, None), ("complete_file2", 0, 90), ] - d = self.do_upload_sdmf() - d.addCallback(self._test_partial_read, self.small_data, modes, 10) - return d + result = await self.do_upload_sdmf() + await self._test_partial_read(result, self.small_data, modes, 10) - def test_partial_read_sdmf_100(self): + async def test_partial_read_sdmf_100(self) -> None: data = b"test data "*10 modes = [("start_at_middle", 50, 50), ("start_at_middle2", 50, None), @@ -440,42 +354,30 @@ class Version(GridTestMixin, AsyncTestCase, testutil.ShouldFailMixin, \ ("complete_file1", 0, 100), ("complete_file2", 0, None), ] - d = self.do_upload_sdmf(data=data) - d.addCallback(self._test_partial_read, data, modes, 10) - return d + result = await self.do_upload_sdmf(data=data) + await self._test_partial_read(result, data, modes, 10) + async def _test_read_and_download(self, node, expected) -> None: + version = await node.get_best_readable_version() + c = consumer.MemoryConsumer() + await version.read(c) + self.assertThat(expected, Equals(b"".join(c.chunks))) - def _test_read_and_download(self, node, expected): - d = node.get_best_readable_version() - def _read_data(version): - c = consumer.MemoryConsumer() - c2 = consumer.MemoryConsumer() - d2 = defer.succeed(None) - d2.addCallback(lambda ignored: version.read(c)) - d2.addCallback(lambda ignored: - self.assertThat(expected, Equals(b"".join(c.chunks)))) + c2 = consumer.MemoryConsumer() + await version.read(c2, offset=0, size=len(expected)) + self.assertThat(expected, Equals(b"".join(c2.chunks))) - d2.addCallback(lambda ignored: version.read(c2, offset=0, - size=len(expected))) - d2.addCallback(lambda ignored: - self.assertThat(expected, Equals(b"".join(c2.chunks)))) - return d2 - d.addCallback(_read_data) - d.addCallback(lambda ignored: node.download_best_version()) - d.addCallback(lambda data: self.assertThat(expected, Equals(data))) - return d + data = await node.download_best_version() + self.assertThat(expected, Equals(data)) - def test_read_and_download_mdmf(self): - d = self.do_upload_mdmf() - d.addCallback(self._test_read_and_download, self.data) - return d + async def test_read_and_download_mdmf(self) -> None: + result = await self.do_upload_mdmf() + await self._test_read_and_download(result, self.data) - def test_read_and_download_sdmf(self): - d = self.do_upload_sdmf() - d.addCallback(self._test_read_and_download, self.small_data) - return d + async def test_read_and_download_sdmf(self) -> None: + result = await self.do_upload_sdmf() + await self._test_read_and_download(result, self.small_data) - def test_read_and_download_sdmf_zero_length(self): - d = self.do_upload_empty_sdmf() - d.addCallback(self._test_read_and_download, b"") - return d + async def test_read_and_download_sdmf_zero_length(self) -> None: + result = await self.do_upload_empty_sdmf() + await self._test_read_and_download(result, b"") diff --git a/src/allmydata/test/test_dirnode.py b/src/allmydata/test/test_dirnode.py index 67d331430..2319e3ce1 100644 --- a/src/allmydata/test/test_dirnode.py +++ b/src/allmydata/test/test_dirnode.py @@ -1619,7 +1619,8 @@ class FakeMutableFile(object): # type: ignore # incomplete implementation return defer.succeed(None) class FakeNodeMaker(NodeMaker): - def create_mutable_file(self, contents=b"", keysize=None, version=None): + def create_mutable_file(self, contents=b"", keysize=None, version=None, keypair=None): + assert keypair is None, "FakeNodeMaker does not support externally supplied keypairs" return defer.succeed(FakeMutableFile(contents)) class FakeClient2(_Client): # type: ignore # tahoe-lafs/ticket/3573 diff --git a/src/allmydata/test/test_istorageserver.py b/src/allmydata/test/test_istorageserver.py index 3328ea598..9e7e7b6e1 100644 --- a/src/allmydata/test/test_istorageserver.py +++ b/src/allmydata/test/test_istorageserver.py @@ -15,9 +15,8 @@ from typing import Set from random import Random from unittest import SkipTest -from twisted.internet.defer import inlineCallbacks, returnValue, succeed +from twisted.internet.defer import inlineCallbacks, returnValue from twisted.internet.task import Clock -from twisted.internet import reactor from foolscap.api import Referenceable, RemoteException # A better name for this would be IStorageClient... @@ -26,8 +25,6 @@ from allmydata.interfaces import IStorageServer from .common_system import SystemTestMixin from .common import AsyncTestCase from allmydata.storage.server import StorageServer # not a IStorageServer!! -from allmydata.storage.http_client import StorageClient -from allmydata.storage_client import _HTTPStorageServer # Use random generator with known seed, so results are reproducible if tests @@ -439,6 +436,17 @@ class IStorageServerImmutableAPIsTestsMixin(object): b"immutable", storage_index, 0, b"ono" ) + @inlineCallbacks + def test_advise_corrupt_share_unknown_share_number(self): + """ + Calling ``advise_corrupt_share()`` on an immutable share, with an + unknown share number, does not result in error. + """ + storage_index, _, _ = yield self.create_share() + yield self.storage_client.advise_corrupt_share( + b"immutable", storage_index, 999, b"ono" + ) + @inlineCallbacks def test_allocate_buckets_creates_lease(self): """ @@ -908,6 +916,19 @@ class IStorageServerMutableAPIsTestsMixin(object): b"mutable", storage_index, 0, b"ono" ) + @inlineCallbacks + def test_advise_corrupt_share_unknown_share_number(self): + """ + Calling ``advise_corrupt_share()`` on a mutable share with an unknown + share number does not result in error (other behavior is opaque at this + level of abstraction). + """ + secrets, storage_index = yield self.create_slot() + + yield self.storage_client.advise_corrupt_share( + b"mutable", storage_index, 999, b"ono" + ) + @inlineCallbacks def test_STARAW_create_lease(self): """ @@ -1023,7 +1044,10 @@ class _SharedMixin(SystemTestMixin): SKIP_TESTS = set() # type: Set[str] def _get_istorage_server(self): - raise NotImplementedError("implement in subclass") + native_server = next(iter(self.clients[0].storage_broker.get_known_servers())) + client = native_server.get_storage_server() + self.assertTrue(IStorageServer.providedBy(client)) + return client @inlineCallbacks def setUp(self): @@ -1046,7 +1070,7 @@ class _SharedMixin(SystemTestMixin): self._clock = Clock() self._clock.advance(123456) self.server._clock = self._clock - self.storage_client = yield self._get_istorage_server() + self.storage_client = self._get_istorage_server() def fake_time(self): """Return the current fake, test-controlled, time.""" @@ -1062,51 +1086,29 @@ class _SharedMixin(SystemTestMixin): yield SystemTestMixin.tearDown(self) -class _FoolscapMixin(_SharedMixin): - """Run tests on Foolscap version of ``IStorageServer``.""" - - def _get_native_server(self): - return next(iter(self.clients[0].storage_broker.get_known_servers())) - - def _get_istorage_server(self): - client = self._get_native_server().get_storage_server() - self.assertTrue(IStorageServer.providedBy(client)) - return succeed(client) - - -class _HTTPMixin(_SharedMixin): - """Run tests on the HTTP version of ``IStorageServer``.""" - - def _get_istorage_server(self): - nurl = list(self.clients[0].storage_nurls)[0] - - # Create HTTP client with non-persistent connections, so we don't leak - # state across tests: - client: IStorageServer = _HTTPStorageServer.from_http_client( - StorageClient.from_nurl(nurl, reactor, persistent=False) - ) - self.assertTrue(IStorageServer.providedBy(client)) - - return succeed(client) - - class FoolscapSharedAPIsTests( - _FoolscapMixin, IStorageServerSharedAPIsTestsMixin, AsyncTestCase + _SharedMixin, IStorageServerSharedAPIsTestsMixin, AsyncTestCase ): """Foolscap-specific tests for shared ``IStorageServer`` APIs.""" + FORCE_FOOLSCAP_FOR_STORAGE = True + class HTTPSharedAPIsTests( - _HTTPMixin, IStorageServerSharedAPIsTestsMixin, AsyncTestCase + _SharedMixin, IStorageServerSharedAPIsTestsMixin, AsyncTestCase ): """HTTP-specific tests for shared ``IStorageServer`` APIs.""" + FORCE_FOOLSCAP_FOR_STORAGE = False + class FoolscapImmutableAPIsTests( - _FoolscapMixin, IStorageServerImmutableAPIsTestsMixin, AsyncTestCase + _SharedMixin, IStorageServerImmutableAPIsTestsMixin, AsyncTestCase ): """Foolscap-specific tests for immutable ``IStorageServer`` APIs.""" + FORCE_FOOLSCAP_FOR_STORAGE = True + def test_disconnection(self): """ If we disconnect in the middle of writing to a bucket, all data is @@ -1129,23 +1131,29 @@ class FoolscapImmutableAPIsTests( """ current = self.storage_client yield self.bounce_client(0) - self.storage_client = self._get_native_server().get_storage_server() + self.storage_client = self._get_istorage_server() assert self.storage_client is not current class HTTPImmutableAPIsTests( - _HTTPMixin, IStorageServerImmutableAPIsTestsMixin, AsyncTestCase + _SharedMixin, IStorageServerImmutableAPIsTestsMixin, AsyncTestCase ): """HTTP-specific tests for immutable ``IStorageServer`` APIs.""" + FORCE_FOOLSCAP_FOR_STORAGE = False + class FoolscapMutableAPIsTests( - _FoolscapMixin, IStorageServerMutableAPIsTestsMixin, AsyncTestCase + _SharedMixin, IStorageServerMutableAPIsTestsMixin, AsyncTestCase ): """Foolscap-specific tests for mutable ``IStorageServer`` APIs.""" + FORCE_FOOLSCAP_FOR_STORAGE = True + class HTTPMutableAPIsTests( - _HTTPMixin, IStorageServerMutableAPIsTestsMixin, AsyncTestCase + _SharedMixin, IStorageServerMutableAPIsTestsMixin, AsyncTestCase ): """HTTP-specific tests for mutable ``IStorageServer`` APIs.""" + + FORCE_FOOLSCAP_FOR_STORAGE = False diff --git a/src/allmydata/test/test_pipeline.py b/src/allmydata/test/test_pipeline.py deleted file mode 100644 index 31d952836..000000000 --- a/src/allmydata/test/test_pipeline.py +++ /dev/null @@ -1,198 +0,0 @@ -""" -Tests for allmydata.util.pipeline. - -Ported to Python 3. -""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 - -import gc - -from twisted.internet import defer -from twisted.trial import unittest -from twisted.python import log -from twisted.python.failure import Failure - -from allmydata.util import pipeline - - -class Pipeline(unittest.TestCase): - def pause(self, *args, **kwargs): - d = defer.Deferred() - self.calls.append( (d, args, kwargs) ) - return d - - def failUnlessCallsAre(self, expected): - #print(self.calls) - #print(expected) - self.failUnlessEqual(len(self.calls), len(expected), self.calls) - for i,c in enumerate(self.calls): - self.failUnlessEqual(c[1:], expected[i], str(i)) - - def test_basic(self): - self.calls = [] - finished = [] - p = pipeline.Pipeline(100) - - d = p.flush() # fires immediately - d.addCallbacks(finished.append, log.err) - self.failUnlessEqual(len(finished), 1) - finished = [] - - d = p.add(10, self.pause, "one") - # the call should start right away, and our return Deferred should - # fire right away - d.addCallbacks(finished.append, log.err) - self.failUnlessEqual(len(finished), 1) - self.failUnlessEqual(finished[0], None) - self.failUnlessCallsAre([ ( ("one",) , {} ) ]) - self.failUnlessEqual(p.gauge, 10) - - # pipeline: [one] - - finished = [] - d = p.add(20, self.pause, "two", kw=2) - # pipeline: [one, two] - - # the call and the Deferred should fire right away - d.addCallbacks(finished.append, log.err) - self.failUnlessEqual(len(finished), 1) - self.failUnlessEqual(finished[0], None) - self.failUnlessCallsAre([ ( ("one",) , {} ), - ( ("two",) , {"kw": 2} ), - ]) - self.failUnlessEqual(p.gauge, 30) - - self.calls[0][0].callback("one-result") - # pipeline: [two] - self.failUnlessEqual(p.gauge, 20) - - finished = [] - d = p.add(90, self.pause, "three", "posarg1") - # pipeline: [two, three] - flushed = [] - fd = p.flush() - fd.addCallbacks(flushed.append, log.err) - self.failUnlessEqual(flushed, []) - - # the call will be made right away, but the return Deferred will not, - # because the pipeline is now full. - d.addCallbacks(finished.append, log.err) - self.failUnlessEqual(len(finished), 0) - self.failUnlessCallsAre([ ( ("one",) , {} ), - ( ("two",) , {"kw": 2} ), - ( ("three", "posarg1"), {} ), - ]) - self.failUnlessEqual(p.gauge, 110) - - self.failUnlessRaises(pipeline.SingleFileError, p.add, 10, self.pause) - - # retiring either call will unblock the pipeline, causing the #3 - # Deferred to fire - self.calls[2][0].callback("three-result") - # pipeline: [two] - - self.failUnlessEqual(len(finished), 1) - self.failUnlessEqual(finished[0], None) - self.failUnlessEqual(flushed, []) - - # retiring call#2 will finally allow the flush() Deferred to fire - self.calls[1][0].callback("two-result") - self.failUnlessEqual(len(flushed), 1) - - def test_errors(self): - self.calls = [] - p = pipeline.Pipeline(100) - - d1 = p.add(200, self.pause, "one") - d2 = p.flush() - - finished = [] - d1.addBoth(finished.append) - self.failUnlessEqual(finished, []) - - flushed = [] - d2.addBoth(flushed.append) - self.failUnlessEqual(flushed, []) - - self.calls[0][0].errback(ValueError("oops")) - - self.failUnlessEqual(len(finished), 1) - f = finished[0] - self.failUnless(isinstance(f, Failure)) - self.failUnless(f.check(pipeline.PipelineError)) - self.failUnlessIn("PipelineError", str(f.value)) - self.failUnlessIn("ValueError", str(f.value)) - r = repr(f.value) - self.failUnless("ValueError" in r, r) - f2 = f.value.error - self.failUnless(f2.check(ValueError)) - - self.failUnlessEqual(len(flushed), 1) - f = flushed[0] - self.failUnless(isinstance(f, Failure)) - self.failUnless(f.check(pipeline.PipelineError)) - f2 = f.value.error - self.failUnless(f2.check(ValueError)) - - # now that the pipeline is in the failed state, any new calls will - # fail immediately - - d3 = p.add(20, self.pause, "two") - - finished = [] - d3.addBoth(finished.append) - self.failUnlessEqual(len(finished), 1) - f = finished[0] - self.failUnless(isinstance(f, Failure)) - self.failUnless(f.check(pipeline.PipelineError)) - r = repr(f.value) - self.failUnless("ValueError" in r, r) - f2 = f.value.error - self.failUnless(f2.check(ValueError)) - - d4 = p.flush() - flushed = [] - d4.addBoth(flushed.append) - self.failUnlessEqual(len(flushed), 1) - f = flushed[0] - self.failUnless(isinstance(f, Failure)) - self.failUnless(f.check(pipeline.PipelineError)) - f2 = f.value.error - self.failUnless(f2.check(ValueError)) - - def test_errors2(self): - self.calls = [] - p = pipeline.Pipeline(100) - - d1 = p.add(10, self.pause, "one") - d2 = p.add(20, self.pause, "two") - d3 = p.add(30, self.pause, "three") - d4 = p.flush() - - # one call fails, then the second one succeeds: make sure - # ExpandableDeferredList tolerates the second one - - flushed = [] - d4.addBoth(flushed.append) - self.failUnlessEqual(flushed, []) - - self.calls[0][0].errback(ValueError("oops")) - self.failUnlessEqual(len(flushed), 1) - f = flushed[0] - self.failUnless(isinstance(f, Failure)) - self.failUnless(f.check(pipeline.PipelineError)) - f2 = f.value.error - self.failUnless(f2.check(ValueError)) - - self.calls[1][0].callback("two-result") - self.calls[2][0].errback(ValueError("three-error")) - - del d1,d2,d3,d4 - gc.collect() # for PyPy diff --git a/src/allmydata/test/test_runner.py b/src/allmydata/test/test_runner.py index 74e3f803e..a84fa28f8 100644 --- a/src/allmydata/test/test_runner.py +++ b/src/allmydata/test/test_runner.py @@ -47,6 +47,9 @@ from twisted.internet.defer import ( inlineCallbacks, DeferredList, ) +from twisted.internet.testing import ( + MemoryReactorClock, +) from twisted.python.filepath import FilePath from allmydata.util import fileutil, pollmixin from allmydata.util.encodingutil import unicode_to_argv @@ -60,6 +63,9 @@ import allmydata from allmydata.scripts.runner import ( parse_options, ) +from allmydata.scripts.tahoe_run import ( + on_stdin_close, +) from .common import ( PIPE, @@ -624,6 +630,64 @@ class RunNode(common_util.SignalMixin, unittest.TestCase, pollmixin.PollMixin): yield client_running +def _simulate_windows_stdin_close(stdio): + """ + on Unix we can just close all the readers, correctly "simulating" + a stdin close .. of course, Windows has to be difficult + """ + stdio.writeConnectionLost() + stdio.readConnectionLost() + + +class OnStdinCloseTests(SyncTestCase): + """ + Tests for on_stdin_close + """ + + def test_close_called(self): + """ + our on-close method is called when stdin closes + """ + reactor = MemoryReactorClock() + called = [] + + def onclose(): + called.append(True) + transport = on_stdin_close(reactor, onclose) + self.assertEqual(called, []) + + if platform.isWindows(): + _simulate_windows_stdin_close(transport) + else: + for reader in reactor.getReaders(): + reader.loseConnection() + reactor.advance(1) # ProcessReader does a callLater(0, ..) + + self.assertEqual(called, [True]) + + def test_exception_ignored(self): + """ + An exception from our on-close function is discarded. + """ + reactor = MemoryReactorClock() + called = [] + + def onclose(): + called.append(True) + raise RuntimeError("unexpected error") + transport = on_stdin_close(reactor, onclose) + self.assertEqual(called, []) + + if platform.isWindows(): + _simulate_windows_stdin_close(transport) + else: + for reader in reactor.getReaders(): + reader.loseConnection() + reactor.advance(1) # ProcessReader does a callLater(0, ..) + + self.assertEqual(called, [True]) + + class PidFileLocking(SyncTestCase): """ Direct tests for allmydata.util.pid functions diff --git a/src/allmydata/test/test_storage.py b/src/allmydata/test/test_storage.py index 134609f81..9b9d2d8de 100644 --- a/src/allmydata/test/test_storage.py +++ b/src/allmydata/test/test_storage.py @@ -3,14 +3,9 @@ Tests for allmydata.storage. Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals -from future.utils import native_str, PY2, bytes_to_native_str, bchr -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations +from future.utils import native_str, bytes_to_native_str, bchr from six import ensure_str from io import ( @@ -59,7 +54,7 @@ from allmydata.storage.common import storage_index_to_dir, \ si_b2a, si_a2b from allmydata.storage.lease import LeaseInfo from allmydata.immutable.layout import WriteBucketProxy, WriteBucketProxy_v2, \ - ReadBucketProxy + ReadBucketProxy, _WriteBuffer from allmydata.mutable.layout import MDMFSlotWriteProxy, MDMFSlotReadProxy, \ LayoutInvalid, MDMFSIGNABLEHEADER, \ SIGNED_PREFIX, MDMFHEADER, \ @@ -3746,3 +3741,39 @@ class LeaseInfoTests(SyncTestCase): info.to_mutable_data(), HasLength(info.mutable_size()), ) + + +class WriteBufferTests(SyncTestCase): + """Tests for ``_WriteBuffer``.""" + + @given( + small_writes=strategies.lists( + strategies.binary(min_size=1, max_size=20), + min_size=10, max_size=20), + batch_size=strategies.integers(min_value=5, max_value=10) + ) + def test_write_buffer(self, small_writes: list[bytes], batch_size: int): + """ + ``_WriteBuffer`` coalesces small writes into bigger writes based on + the batch size. + """ + wb = _WriteBuffer(batch_size) + result = b"" + for data in small_writes: + should_flush = wb.queue_write(data) + if should_flush: + flushed_offset, flushed_data = wb.flush() + self.assertEqual(flushed_offset, len(result)) + # The flushed data is in batch sizes, or closest approximation + # given queued inputs: + self.assertTrue(batch_size <= len(flushed_data) < batch_size + len(data)) + result += flushed_data + + # Final flush: + remaining_length = wb.get_queued_bytes() + flushed_offset, flushed_data = wb.flush() + self.assertEqual(remaining_length, len(flushed_data)) + self.assertEqual(flushed_offset, len(result)) + result += flushed_data + + self.assertEqual(result, b"".join(small_writes)) diff --git a/src/allmydata/test/test_storage_http.py b/src/allmydata/test/test_storage_http.py index 4a912cf6c..55754b29b 100644 --- a/src/allmydata/test/test_storage_http.py +++ b/src/allmydata/test/test_storage_http.py @@ -31,10 +31,13 @@ from klein import Klein from hyperlink import DecodedURL from collections_extended import RangeMap from twisted.internet.task import Clock, Cooperator +from twisted.internet.interfaces import IReactorTime +from twisted.internet.defer import CancelledError, Deferred from twisted.web import http from twisted.web.http_headers import Headers from werkzeug import routing from werkzeug.exceptions import NotFound as WNotFound +from testtools.matchers import Equals from .common import SyncTestCase from ..storage.http_common import get_content_type, CBOR_MIME_TYPE @@ -245,6 +248,7 @@ def gen_bytes(length: int) -> bytes: class TestApp(object): """HTTP API for testing purposes.""" + clock: IReactorTime _app = Klein() _swissnum = SWISSNUM_FOR_TEST # Match what the test client is using @@ -266,6 +270,25 @@ class TestApp(object): """Return bytes to the given length using ``gen_bytes()``.""" return gen_bytes(length) + @_authorized_route(_app, set(), "/slowly_never_finish_result", methods=["GET"]) + def slowly_never_finish_result(self, request, authorization): + """ + Send data immediately, after 59 seconds, after another 59 seconds, and then + never again, without finishing the response. + """ + request.write(b"a") + self.clock.callLater(59, request.write, b"b") + self.clock.callLater(59 + 59, request.write, b"c") + return Deferred() + + @_authorized_route(_app, set(), "/die_unfinished", methods=["GET"]) + def die(self, request, authorization): + """ + Dies half-way. + """ + request.transport.loseConnection() + return Deferred() + def result_of(d): """ @@ -291,14 +314,25 @@ class CustomHTTPServerTests(SyncTestCase): def setUp(self): super(CustomHTTPServerTests, self).setUp() + StorageClient.start_test_mode( + lambda pool: self.addCleanup(pool.closeCachedConnections) + ) + self.addCleanup(StorageClient.stop_test_mode) # Could be a fixture, but will only be used in this test class so not # going to bother: self._http_server = TestApp() + treq = StubTreq(self._http_server._app.resource()) self.client = StorageClient( DecodedURL.from_text("http://127.0.0.1"), SWISSNUM_FOR_TEST, - treq=StubTreq(self._http_server._app.resource()), + treq=treq, + # We're using a Treq private API to get the reactor, alas, but only + # in a test, so not going to worry about it too much. This would be + # fixed if https://github.com/twisted/treq/issues/226 were ever + # fixed. + clock=treq._agent._memoryReactor, ) + self._http_server.clock = self.client._clock def test_authorization_enforcement(self): """ @@ -346,7 +380,9 @@ class CustomHTTPServerTests(SyncTestCase): ) self.assertEqual( - result_of(limited_content(response, at_least_length)).read(), + result_of( + limited_content(response, self._http_server.clock, at_least_length) + ).read(), gen_bytes(length), ) @@ -365,7 +401,52 @@ class CustomHTTPServerTests(SyncTestCase): ) with self.assertRaises(ValueError): - result_of(limited_content(response, too_short)) + result_of(limited_content(response, self._http_server.clock, too_short)) + + def test_limited_content_silence_causes_timeout(self): + """ + ``http_client.limited_content() times out if it receives no data for 60 + seconds. + """ + response = result_of( + self.client.request( + "GET", + "http://127.0.0.1/slowly_never_finish_result", + ) + ) + + body_deferred = limited_content(response, self._http_server.clock, 4) + result = [] + error = [] + body_deferred.addCallbacks(result.append, error.append) + + for i in range(59 + 59 + 60): + self.assertEqual((result, error), ([], [])) + self._http_server.clock.advance(1) + # Push data between in-memory client and in-memory server: + self.client._treq._agent.flush() + + # After 59 (second write) + 59 (third write) + 60 seconds (quiescent + # timeout) the limited_content() response times out. + self.assertTrue(error) + with self.assertRaises(CancelledError): + error[0].raiseException() + + def test_limited_content_cancels_timeout_on_failed_response(self): + """ + If the response fails somehow, the timeout is still cancelled. + """ + response = result_of( + self.client.request( + "GET", + "http://127.0.0.1/die", + ) + ) + + d = limited_content(response, self._http_server.clock, 4) + with self.assertRaises(ValueError): + result_of(d) + self.assertEqual(len(self._http_server.clock.getDelayedCalls()), 0) class HttpTestFixture(Fixture): @@ -375,6 +456,10 @@ class HttpTestFixture(Fixture): """ def _setUp(self): + StorageClient.start_test_mode( + lambda pool: self.addCleanup(pool.closeCachedConnections) + ) + self.addCleanup(StorageClient.stop_test_mode) self.clock = Clock() self.tempdir = self.useFixture(TempDir()) # The global Cooperator used by Twisted (a) used by pull producers in @@ -396,6 +481,7 @@ class HttpTestFixture(Fixture): DecodedURL.from_text("http://127.0.0.1"), SWISSNUM_FOR_TEST, treq=self.treq, + clock=self.clock, ) def result_of_with_flush(self, d): @@ -470,6 +556,20 @@ class GenericHTTPAPITests(SyncTestCase): super(GenericHTTPAPITests, self).setUp() self.http = self.useFixture(HttpTestFixture()) + def test_missing_authentication(self) -> None: + """ + If nothing is given in the ``Authorization`` header at all an + ``Unauthorized`` response is returned. + """ + client = StubTreq(self.http.http_server.get_resource()) + response = self.http.result_of_with_flush( + client.request( + "GET", + "http://127.0.0.1/storage/v1/version", + ), + ) + self.assertThat(response.code, Equals(http.UNAUTHORIZED)) + def test_bad_authentication(self): """ If the wrong swissnum is used, an ``Unauthorized`` response code is @@ -480,6 +580,7 @@ class GenericHTTPAPITests(SyncTestCase): DecodedURL.from_text("http://127.0.0.1"), b"something wrong", treq=StubTreq(self.http.http_server.get_resource()), + clock=self.http.clock, ) ) with assert_fails_with_http_code(self, http.UNAUTHORIZED): @@ -1100,18 +1201,42 @@ class MutableHTTPAPIsTests(SyncTestCase): ) return storage_index, write_secret, lease_secret - def test_write_can_be_read(self): + def test_write_can_be_read_small_data(self): + """ + Small written data can be read using ``read_share_chunk``. + """ + self.write_can_be_read(b"abcdef") + + def test_write_can_be_read_large_data(self): + """ + Large written data (50MB) can be read using ``read_share_chunk``. + """ + self.write_can_be_read(b"abcdefghij" * 5 * 1024 * 1024) + + def write_can_be_read(self, data): """ Written data can be read using ``read_share_chunk``. """ - storage_index, _, _ = self.create_upload() - data0 = self.http.result_of_with_flush( - self.mut_client.read_share_chunk(storage_index, 0, 1, 7) + lease_secret = urandom(32) + storage_index = urandom(16) + self.http.result_of_with_flush( + self.mut_client.read_test_write_chunks( + storage_index, + urandom(32), + lease_secret, + lease_secret, + { + 0: TestWriteVectors( + write_vectors=[WriteVector(offset=0, data=data)] + ), + }, + [], + ) ) - data1 = self.http.result_of_with_flush( - self.mut_client.read_share_chunk(storage_index, 1, 0, 8) + read_data = self.http.result_of_with_flush( + self.mut_client.read_share_chunk(storage_index, 0, 0, len(data)) ) - self.assertEqual((data0, data1), (b"bcdef-0", b"abcdef-1")) + self.assertEqual(read_data, data) def test_read_before_write(self): """In combo read/test/write operation, reads happen before writes.""" @@ -1190,15 +1315,6 @@ class MutableHTTPAPIsTests(SyncTestCase): b"aXYZef-0", ) - def test_too_large_write(self): - """ - Writing too large of a chunk results in a REQUEST ENTITY TOO LARGE http - error. - """ - with self.assertRaises(ClientException) as e: - self.create_upload(b"0123456789" * 1024 * 1024) - self.assertEqual(e.exception.code, http.REQUEST_ENTITY_TOO_LARGE) - def test_list_shares(self): """``list_shares()`` returns the shares for a given storage index.""" storage_index, _, _ = self.create_upload() @@ -1441,7 +1557,9 @@ class SharedImmutableMutableTestsMixin: self.http.client.request( "GET", self.http.client.relative_url( - "/storage/v1/{}/{}/1".format(self.KIND, _encode_si(storage_index)) + "/storage/v1/{}/{}/1".format( + self.KIND, _encode_si(storage_index) + ) ), headers=headers, ) diff --git a/src/allmydata/test/test_storage_https.py b/src/allmydata/test/test_storage_https.py index bacb40290..a11b0eed5 100644 --- a/src/allmydata/test/test_storage_https.py +++ b/src/allmydata/test/test_storage_https.py @@ -12,7 +12,7 @@ from cryptography import x509 from twisted.internet.endpoints import serverFromString from twisted.internet import reactor -from twisted.internet.task import deferLater +from twisted.internet.defer import maybeDeferred from twisted.web.server import Site from twisted.web.static import Data from twisted.web.client import Agent, HTTPConnectionPool, ResponseNeverReceived @@ -30,6 +30,7 @@ from ..storage.http_common import get_spki_hash from ..storage.http_client import _StorageClientHTTPSPolicy from ..storage.http_server import _TLSEndpointWrapper from ..util.deferredutil import async_to_deferred +from .common_system import spin_until_cleanup_done class HTTPSNurlTests(SyncTestCase): @@ -87,6 +88,10 @@ class PinningHTTPSValidation(AsyncTestCase): self.addCleanup(self._port_assigner.tearDown) return AsyncTestCase.setUp(self) + def tearDown(self): + d = maybeDeferred(AsyncTestCase.tearDown, self) + return d.addCallback(lambda _: spin_until_cleanup_done()) + @asynccontextmanager async def listen(self, private_key_path: FilePath, cert_path: FilePath): """ @@ -107,9 +112,6 @@ class PinningHTTPSValidation(AsyncTestCase): yield f"https://127.0.0.1:{listening_port.getHost().port}/" finally: await listening_port.stopListening() - # Make sure all server connections are closed :( No idea why this - # is necessary when it's not for IStorageServer HTTPS tests. - await deferLater(reactor, 0.01) def request(self, url: str, expected_certificate: x509.Certificate): """ @@ -198,10 +200,6 @@ class PinningHTTPSValidation(AsyncTestCase): response = await self.request(url, certificate) self.assertEqual(await response.content(), b"YOYODYNE") - # We keep getting TLSMemoryBIOProtocol being left around, so try harder - # to wait for it to finish. - await deferLater(reactor, 0.001) - # A potential attack to test is a private key that doesn't match the # certificate... but OpenSSL (quite rightly) won't let you listen with that # so I don't know how to test that! See diff --git a/src/allmydata/test/test_system.py b/src/allmydata/test/test_system.py index d859a0e00..10a64c1fe 100644 --- a/src/allmydata/test/test_system.py +++ b/src/allmydata/test/test_system.py @@ -34,7 +34,7 @@ from allmydata.util.encodingutil import quote_output, unicode_to_argv from allmydata.util.fileutil import abspath_expanduser_unicode from allmydata.util.consumer import MemoryConsumer, download_to_data from allmydata.interfaces import IDirectoryNode, IFileNode, \ - NoSuchChildError, NoSharesError + NoSuchChildError, NoSharesError, SDMF_VERSION, MDMF_VERSION from allmydata.monitor import Monitor from allmydata.mutable.common import NotWriteableError from allmydata.mutable import layout as mutable_layout @@ -117,11 +117,17 @@ class CountingDataUploadable(upload.Data): class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): - + """Foolscap integration-y tests.""" + FORCE_FOOLSCAP_FOR_STORAGE = True timeout = 180 + @property + def basedir(self): + return "system/SystemTest/{}-foolscap-{}".format( + self.id().split(".")[-1], self.FORCE_FOOLSCAP_FOR_STORAGE + ) + def test_connections(self): - self.basedir = "system/SystemTest/test_connections" d = self.set_up_nodes() self.extra_node = None d.addCallback(lambda res: self.add_extra_node(self.numclients)) @@ -149,11 +155,9 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): del test_connections def test_upload_and_download_random_key(self): - self.basedir = "system/SystemTest/test_upload_and_download_random_key" return self._test_upload_and_download(convergence=None) def test_upload_and_download_convergent(self): - self.basedir = "system/SystemTest/test_upload_and_download_convergent" return self._test_upload_and_download(convergence=b"some convergence string") def _test_upload_and_download(self, convergence): @@ -473,9 +477,10 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): def _corrupt_mutable_share(self, filename, which): msf = MutableShareFile(filename) - datav = msf.readv([ (0, 1000000) ]) + # Read more than share length: + datav = msf.readv([ (0, 10_000_000) ]) final_share = datav[0] - assert len(final_share) < 1000000 # ought to be truncated + assert len(final_share) < 10_000_000 # ought to be truncated pieces = mutable_layout.unpack_share(final_share) (seqnum, root_hash, IV, k, N, segsize, datalen, verification_key, signature, share_hash_chain, block_hash_tree, @@ -515,13 +520,20 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): msf.writev( [(0, final_share)], None) - def test_mutable(self): - self.basedir = "system/SystemTest/test_mutable" + def test_mutable_sdmf(self): + """SDMF mutables can be uploaded, downloaded, and many other things.""" + return self._test_mutable(SDMF_VERSION) + + def test_mutable_mdmf(self): + """MDMF mutables can be uploaded, downloaded, and many other things.""" + return self._test_mutable(MDMF_VERSION) + + def _test_mutable(self, mutable_version): DATA = b"initial contents go here." # 25 bytes % 3 != 0 DATA_uploadable = MutableData(DATA) NEWDATA = b"new contents yay" NEWDATA_uploadable = MutableData(NEWDATA) - NEWERDATA = b"this is getting old" + NEWERDATA = b"this is getting old" * 1_000_000 NEWERDATA_uploadable = MutableData(NEWERDATA) d = self.set_up_nodes() @@ -529,7 +541,7 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): def _create_mutable(res): c = self.clients[0] log.msg("starting create_mutable_file") - d1 = c.create_mutable_file(DATA_uploadable) + d1 = c.create_mutable_file(DATA_uploadable, mutable_version) def _done(res): log.msg("DONE: %s" % (res,)) self._mutable_node_1 = res @@ -551,27 +563,33 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): filename) self.failUnlessEqual(rc, 0) try: + share_type = 'SDMF' if mutable_version == SDMF_VERSION else 'MDMF' self.failUnless("Mutable slot found:\n" in output) - self.failUnless("share_type: SDMF\n" in output) + self.assertIn(f"share_type: {share_type}\n", output) peerid = idlib.nodeid_b2a(self.clients[client_num].nodeid) self.failUnless(" WE for nodeid: %s\n" % peerid in output) self.failUnless(" num_extra_leases: 0\n" in output) self.failUnless(" secrets are for nodeid: %s\n" % peerid in output) - self.failUnless(" SDMF contents:\n" in output) + self.failUnless(f" {share_type} contents:\n" in output) self.failUnless(" seqnum: 1\n" in output) self.failUnless(" required_shares: 3\n" in output) self.failUnless(" total_shares: 10\n" in output) - self.failUnless(" segsize: 27\n" in output, (output, filename)) + if mutable_version == SDMF_VERSION: + self.failUnless(" segsize: 27\n" in output, (output, filename)) self.failUnless(" datalen: 25\n" in output) # the exact share_hash_chain nodes depends upon the sharenum, # and is more of a hassle to compute than I want to deal with # now self.failUnless(" share_hash_chain: " in output) self.failUnless(" block_hash_tree: 1 nodes\n" in output) - expected = (" verify-cap: URI:SSK-Verifier:%s:" % - str(base32.b2a(storage_index), "ascii")) - self.failUnless(expected in output) + if mutable_version == SDMF_VERSION: + expected = (" verify-cap: URI:SSK-Verifier:%s:" % + str(base32.b2a(storage_index), "ascii")) + else: + expected = (" verify-cap: URI:MDMF-Verifier:%s" % + str(base32.b2a(storage_index), "ascii")) + self.assertIn(expected, output) except unittest.FailTest: print() print("dump-share output was:") @@ -691,7 +709,10 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): # when we retrieve this, we should get three signature # failures (where we've mangled seqnum, R, and segsize). The # pubkey mangling - d.addCallback(_corrupt_shares) + + if mutable_version == SDMF_VERSION: + # TODO Corrupting shares in test_systm doesn't work for MDMF right now + d.addCallback(_corrupt_shares) d.addCallback(lambda res: self._newnode3.download_best_version()) d.addCallback(_check_download_5) @@ -699,7 +720,7 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): def _check_empty_file(res): # make sure we can create empty files, this usually screws up the # segsize math - d1 = self.clients[2].create_mutable_file(MutableData(b"")) + d1 = self.clients[2].create_mutable_file(MutableData(b""), mutable_version) d1.addCallback(lambda newnode: newnode.download_best_version()) d1.addCallback(lambda res: self.failUnlessEqual(b"", res)) return d1 @@ -746,7 +767,6 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): # plaintext_hash check. def test_filesystem(self): - self.basedir = "system/SystemTest/test_filesystem" self.data = LARGE_DATA d = self.set_up_nodes() def _new_happy_semantics(ign): @@ -1713,7 +1733,6 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): def test_filesystem_with_cli_in_subprocess(self): # We do this in a separate test so that test_filesystem doesn't skip if we can't run bin/tahoe. - self.basedir = "system/SystemTest/test_filesystem_with_cli_in_subprocess" d = self.set_up_nodes() def _new_happy_semantics(ign): for c in self.clients: @@ -1794,9 +1813,21 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): class Connections(SystemTestMixin, unittest.TestCase): + FORCE_FOOLSCAP_FOR_STORAGE = True def test_rref(self): - self.basedir = "system/Connections/rref" + # The way the listening port is created is via + # SameProcessStreamEndpointAssigner (allmydata.test.common), which then + # makes an endpoint string parsed by AdoptedServerPort. The latter does + # dup(fd), which results in the filedescriptor staying alive _until the + # test ends_. That means that when we disown the service, we still have + # the listening port there on the OS level! Just the resulting + # connections aren't handled. So this test relies on aggressive + # timeouts in the HTTP client and presumably some equivalent in + # Foolscap, since connection refused does _not_ happen. + self.basedir = "system/Connections/rref-foolscap-{}".format( + self.FORCE_FOOLSCAP_FOR_STORAGE + ) d = self.set_up_nodes(2) def _start(ign): self.c0 = self.clients[0] @@ -1812,9 +1843,13 @@ class Connections(SystemTestMixin, unittest.TestCase): # now shut down the server d.addCallback(lambda ign: self.clients[1].disownServiceParent()) + + # kill any persistent http connections that might continue to work + d.addCallback(lambda ign: self.close_idle_http_connections()) + # and wait for the client to notice def _poll(): - return len(self.c0.storage_broker.get_connected_servers()) < 2 + return len(self.c0.storage_broker.get_connected_servers()) == 1 d.addCallback(lambda ign: self.poll(_poll)) def _down(ign): @@ -1824,3 +1859,16 @@ class Connections(SystemTestMixin, unittest.TestCase): self.assertEqual(storage_server, self.s1_storage_server) d.addCallback(_down) return d + + +class HTTPSystemTest(SystemTest): + """HTTP storage protocol variant of the system tests.""" + + FORCE_FOOLSCAP_FOR_STORAGE = False + + + +class HTTPConnections(Connections): + """HTTP storage protocol variant of the connections tests.""" + FORCE_FOOLSCAP_FOR_STORAGE = False + diff --git a/src/allmydata/test/test_testing.py b/src/allmydata/test/test_testing.py index 3715d1aca..07bebb7a1 100644 --- a/src/allmydata/test/test_testing.py +++ b/src/allmydata/test/test_testing.py @@ -9,18 +9,7 @@ """ Tests for the allmydata.testing helpers - -Ported to Python 3. - """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 from twisted.internet.defer import ( inlineCallbacks, @@ -56,10 +45,12 @@ from testtools.matchers import ( IsInstance, MatchesStructure, AfterPreprocessing, + Contains, ) from testtools.twistedsupport import ( succeeded, ) +from twisted.web.http import GONE class FakeWebTest(SyncTestCase): @@ -144,7 +135,8 @@ class FakeWebTest(SyncTestCase): def test_download_missing(self): """ - Error if we download a capability that doesn't exist + The response to a request to download a capability that doesn't exist + is 410 (GONE). """ http_client = create_tahoe_treq_client() @@ -157,7 +149,11 @@ class FakeWebTest(SyncTestCase): resp, succeeded( MatchesStructure( - code=Equals(500) + code=Equals(GONE), + content=AfterPreprocessing( + lambda m: m(), + succeeded(Contains(b"No data for")), + ), ) ) ) diff --git a/src/allmydata/test/web/test_web.py b/src/allmydata/test/web/test_web.py index 03cd6e560..4c828817a 100644 --- a/src/allmydata/test/web/test_web.py +++ b/src/allmydata/test/web/test_web.py @@ -1,19 +1,14 @@ """ -Ported to Python 3. +Tests for a bunch of web-related APIs. """ -from __future__ import print_function -from __future__ import absolute_import -from __future__ import division -from __future__ import unicode_literals +from __future__ import annotations -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 from six import ensure_binary import os.path, re, time import treq from urllib.parse import quote as urlquote, unquote as urlunquote +from base64 import urlsafe_b64encode from bs4 import BeautifulSoup @@ -38,6 +33,7 @@ from allmydata.util import fileutil, base32, hashutil, jsonbytes as json from allmydata.util.consumer import download_to_data from allmydata.util.encodingutil import to_bytes from ...util.connection_status import ConnectionStatus +from ...crypto.rsa import PublicKey, PrivateKey, create_signing_keypair, der_string_from_signing_key from ..common import ( EMPTY_CLIENT_CONFIG, FakeCHKFileNode, @@ -65,6 +61,7 @@ from allmydata.interfaces import ( MustBeReadonlyError, ) from allmydata.mutable import servermap, publish, retrieve +from allmydata.mutable.common import derive_mutable_keys from .. import common_util as testutil from ..common_util import TimezoneMixin from ..common_web import ( @@ -93,6 +90,7 @@ class FakeNodeMaker(NodeMaker): 'happy': 7, 'max_segment_size':128*1024 # 1024=KiB } + all_contents: dict[bytes, object] def _create_lit(self, cap): return FakeCHKFileNode(cap, self.all_contents) def _create_immutable(self, cap): @@ -100,11 +98,19 @@ class FakeNodeMaker(NodeMaker): def _create_mutable(self, cap): return FakeMutableFileNode(None, None, self.encoding_params, None, - self.all_contents).init_from_cap(cap) - def create_mutable_file(self, contents=b"", keysize=None, - version=SDMF_VERSION): + self.all_contents, None).init_from_cap(cap) + def create_mutable_file(self, + contents=None, + version=None, + keypair: tuple[PublicKey, PrivateKey] | None=None, + ): + if contents is None: + contents = b"" + if version is None: + version = SDMF_VERSION + n = FakeMutableFileNode(None, None, self.encoding_params, None, - self.all_contents) + self.all_contents, keypair) return n.create(contents, version=version) class FakeUploader(service.Service): @@ -2868,6 +2874,41 @@ class Web(WebMixin, WebErrorMixin, testutil.StallMixin, testutil.ReallyEqualMixi "Unknown format: foo", method="post", data=body, headers=headers) + async def test_POST_upload_keypair(self) -> None: + """ + A *POST* creating a new mutable object may include a *private-key* + query argument giving a urlsafe-base64-encoded RSA private key to use + as the "signature key". The given signature key is used, rather than + a new one being generated. + """ + format = "sdmf" + priv, pub = create_signing_keypair(2048) + encoded_privkey = urlsafe_b64encode(der_string_from_signing_key(priv)).decode("ascii") + filename = "predetermined-sdmf" + expected_content = self.NEWFILE_CONTENTS * 100 + actual_cap = uri.from_string(await self.POST( + self.public_url + + f"/foo?t=upload&format={format}&private-key={encoded_privkey}", + file=(filename, expected_content), + )) + # Ideally we would inspect the private ("signature") and public + # ("verification") keys but they are not made easily accessible here + # (ostensibly because we have a FakeMutableFileNode instead of a real + # one). + # + # So, instead, re-compute the writekey and fingerprint and compare + # those against the capability string. + expected_writekey, _, expected_fingerprint = derive_mutable_keys((pub, priv)) + self.assertEqual( + (expected_writekey, expected_fingerprint), + (actual_cap.writekey, actual_cap.fingerprint), + ) + + # And the capability we got can be used to download the data we + # uploaded. + downloaded_content = await self.GET(f"/uri/{actual_cap.to_string().decode('ascii')}") + self.assertEqual(expected_content, downloaded_content) + def test_POST_upload_format(self): def _check_upload(ign, format, uri_prefix, fn=None): filename = format + ".txt" diff --git a/src/allmydata/test/web/test_webish.py b/src/allmydata/test/web/test_webish.py index 4a77d21ae..050f77d1c 100644 --- a/src/allmydata/test/web/test_webish.py +++ b/src/allmydata/test/web/test_webish.py @@ -202,6 +202,16 @@ class TahoeLAFSSiteTests(SyncTestCase): ), ) + def test_private_key_censoring(self): + """ + The log event for a request including a **private-key** query + argument has the private key value censored. + """ + self._test_censoring( + b"/uri?uri=URI:CHK:aaa:bbb&private-key=AAAAaaaabbbb==", + b"/uri?uri=[CENSORED]&private-key=[CENSORED]", + ) + def test_uri_censoring(self): """ The log event for a request for **/uri/** has the capability value diff --git a/src/allmydata/testing/web.py b/src/allmydata/testing/web.py index bb858b555..4f68b3774 100644 --- a/src/allmydata/testing/web.py +++ b/src/allmydata/testing/web.py @@ -6,20 +6,12 @@ # This file is part of Tahoe-LAFS. # # See the docs/about.rst file for licensing information. -"""Test-helpers for clients that use the WebUI. - -Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +Test-helpers for clients that use the WebUI. +""" +from __future__ import annotations import hashlib @@ -54,6 +46,7 @@ import allmydata.uri from allmydata.util import ( base32, ) +from ..util.dictutil import BytesKeyDict __all__ = ( @@ -147,7 +140,7 @@ class _FakeTahoeUriHandler(Resource, object): isLeaf = True - data = attr.ib(default=attr.Factory(dict)) + data: BytesKeyDict = attr.ib(default=attr.Factory(BytesKeyDict)) capability_generators = attr.ib(default=attr.Factory(dict)) def _generate_capability(self, kind): @@ -209,7 +202,7 @@ class _FakeTahoeUriHandler(Resource, object): capability = None for arg, value in uri.query: if arg == u"uri": - capability = value + capability = value.encode("utf-8") # it's legal to use the form "/uri/" if capability is None and request.postpath and request.postpath[0]: capability = request.postpath[0] @@ -221,10 +214,9 @@ class _FakeTahoeUriHandler(Resource, object): # the user gave us a capability; if our Grid doesn't have any # data for it, that's an error. - capability = capability.encode('ascii') if capability not in self.data: - request.setResponseCode(http.BAD_REQUEST) - return u"No data for '{}'".format(capability.decode('ascii')) + request.setResponseCode(http.GONE) + return u"No data for '{}'".format(capability.decode('ascii')).encode("utf-8") return self.data[capability] diff --git a/src/allmydata/util/dictutil.py b/src/allmydata/util/dictutil.py index 5971d26f6..0a7df0a38 100644 --- a/src/allmydata/util/dictutil.py +++ b/src/allmydata/util/dictutil.py @@ -1,21 +1,6 @@ """ Tools to mess with dicts. - -Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - # IMPORTANT: We deliberately don't import dict. The issue is that we're - # subclassing dict, so we'd end up exposing Python 3 dict APIs to lots of - # code that doesn't support it. - from builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, list, object, range, str, max, min # noqa: F401 -from six import ensure_str - class DictOfSets(dict): def add(self, key, value): @@ -104,7 +89,7 @@ def _make_enforcing_override(K, method_name): raise TypeError("{} must be of type {}".format( repr(key), self.KEY_TYPE)) return getattr(dict, method_name)(self, key, *args, **kwargs) - f.__name__ = ensure_str(method_name) + f.__name__ = method_name setattr(K, method_name, f) for _method_name in ["__setitem__", "__getitem__", "setdefault", "get", @@ -113,18 +98,13 @@ for _method_name in ["__setitem__", "__getitem__", "setdefault", "get", del _method_name -if PY2: - # No need for enforcement, can use either bytes or unicode as keys and it's - # fine. - BytesKeyDict = UnicodeKeyDict = dict -else: - class BytesKeyDict(_TypedKeyDict): - """Keys should be bytes.""" +class BytesKeyDict(_TypedKeyDict): + """Keys should be bytes.""" - KEY_TYPE = bytes + KEY_TYPE = bytes - class UnicodeKeyDict(_TypedKeyDict): - """Keys should be unicode strings.""" +class UnicodeKeyDict(_TypedKeyDict): + """Keys should be unicode strings.""" - KEY_TYPE = str + KEY_TYPE = str diff --git a/src/allmydata/util/pipeline.py b/src/allmydata/util/pipeline.py deleted file mode 100644 index 31f5d5d49..000000000 --- a/src/allmydata/util/pipeline.py +++ /dev/null @@ -1,149 +0,0 @@ -""" -A pipeline of Deferreds. - -Ported to Python 3. -""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 - -from twisted.internet import defer -from twisted.python.failure import Failure -from twisted.python import log -from allmydata.util.assertutil import precondition - - -class PipelineError(Exception): - """One of the pipelined messages returned an error. The received Failure - object is stored in my .error attribute.""" - def __init__(self, error): - self.error = error - - def __repr__(self): - return "" % (self.error,) - def __str__(self): - return "" % (self.error,) - -class SingleFileError(Exception): - """You are not permitted to add a job to a full pipeline.""" - - -class ExpandableDeferredList(defer.Deferred, object): - # like DeferredList(fireOnOneErrback=True) with a built-in - # gatherResults(), but you can add new Deferreds until you close it. This - # gives you a chance to add don't-complain-about-unhandled-error errbacks - # immediately after attachment, regardless of whether you actually end up - # wanting the list or not. - def __init__(self): - defer.Deferred.__init__(self) - self.resultsReceived = 0 - self.resultList = [] - self.failure = None - self.closed = False - - def addDeferred(self, d): - precondition(not self.closed, "don't call addDeferred() on a closed ExpandableDeferredList") - index = len(self.resultList) - self.resultList.append(None) - d.addCallbacks(self._cbDeferred, self._ebDeferred, - callbackArgs=(index,)) - return d - - def close(self): - self.closed = True - self.checkForFinished() - - def checkForFinished(self): - if not self.closed: - return - if self.called: - return - if self.failure: - self.errback(self.failure) - elif self.resultsReceived == len(self.resultList): - self.callback(self.resultList) - - def _cbDeferred(self, res, index): - self.resultList[index] = res - self.resultsReceived += 1 - self.checkForFinished() - return res - - def _ebDeferred(self, f): - self.failure = f - self.checkForFinished() - return f - - -class Pipeline(object): - """I manage a size-limited pipeline of Deferred operations, usually - callRemote() messages.""" - - def __init__(self, capacity): - self.capacity = capacity # how full we can be - self.gauge = 0 # how full we are - self.failure = None - self.waiting = [] # callers of add() who are blocked - self.unflushed = ExpandableDeferredList() - - def add(self, _size, _func, *args, **kwargs): - # We promise that all the Deferreds we return will fire in the order - # they were returned. To make it easier to keep this promise, we - # prohibit multiple outstanding calls to add() . - if self.waiting: - raise SingleFileError - if self.failure: - return defer.fail(self.failure) - self.gauge += _size - fd = defer.maybeDeferred(_func, *args, **kwargs) - fd.addBoth(self._call_finished, _size) - self.unflushed.addDeferred(fd) - fd.addErrback(self._eat_pipeline_errors) - fd.addErrback(log.err, "_eat_pipeline_errors didn't eat it") - if self.gauge < self.capacity: - return defer.succeed(None) - d = defer.Deferred() - self.waiting.append(d) - return d - - def flush(self): - if self.failure: - return defer.fail(self.failure) - d, self.unflushed = self.unflushed, ExpandableDeferredList() - d.close() - d.addErrback(self._flushed_error) - return d - - def _flushed_error(self, f): - precondition(self.failure) # should have been set by _call_finished - return self.failure - - def _call_finished(self, res, size): - self.gauge -= size - if isinstance(res, Failure): - res = Failure(PipelineError(res)) - if not self.failure: - self.failure = res - if self.failure: - while self.waiting: - d = self.waiting.pop(0) - d.errback(self.failure) - else: - while self.waiting and (self.gauge < self.capacity): - d = self.waiting.pop(0) - d.callback(None) - # the d.callback() might trigger a new call to add(), which - # will raise our gauge and might cause the pipeline to be - # filled. So the while() loop gets a chance to tell the - # caller to stop. - return res - - def _eat_pipeline_errors(self, f): - f.trap(PipelineError) - return None diff --git a/src/allmydata/web/common.py b/src/allmydata/web/common.py index bf89044a3..3d85b1c4d 100644 --- a/src/allmydata/web/common.py +++ b/src/allmydata/web/common.py @@ -1,26 +1,17 @@ """ Ported to Python 3. """ -from __future__ import division -from __future__ import absolute_import -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, max, min # noqa: F401 - from past.builtins import unicode as str # prevent leaking newbytes/newstr into code that can't handle it +from __future__ import annotations from six import ensure_str -try: - from typing import Optional, Union, Tuple, Any -except ImportError: - pass +from typing import Optional, Union, TypeVar, overload +from typing_extensions import Literal import time import json from functools import wraps +from base64 import urlsafe_b64decode from hyperlink import ( DecodedURL, @@ -94,7 +85,7 @@ from allmydata.util.encodingutil import ( to_bytes, ) from allmydata.util import abbreviate - +from allmydata.crypto.rsa import PrivateKey, PublicKey, create_signing_keypair_from_string class WebError(Exception): def __init__(self, text, code=http.BAD_REQUEST): @@ -713,8 +704,15 @@ def url_for_string(req, url_string): ) return url +T = TypeVar("T") -def get_arg(req, argname, default=None, multiple=False): # type: (IRequest, Union[bytes,str], Any, bool) -> Union[bytes,Tuple[bytes],Any] +@overload +def get_arg(req: IRequest, argname: str | bytes, default: Optional[T] = None, *, multiple: Literal[False] = False) -> T | bytes: ... + +@overload +def get_arg(req: IRequest, argname: str | bytes, default: Optional[T] = None, *, multiple: Literal[True]) -> T | tuple[bytes, ...]: ... + +def get_arg(req: IRequest, argname: str | bytes, default: Optional[T] = None, *, multiple: bool = False) -> None | T | bytes | tuple[bytes, ...]: """Extract an argument from either the query args (req.args) or the form body fields (req.fields). If multiple=False, this returns a single value (or the default, which defaults to None), and the query args take @@ -726,13 +724,14 @@ def get_arg(req, argname, default=None, multiple=False): # type: (IRequest, Uni :return: Either bytes or tuple of bytes. """ if isinstance(argname, str): - argname = argname.encode("utf-8") - if isinstance(default, str): - default = default.encode("utf-8") + argname_bytes = argname.encode("utf-8") + else: + argname_bytes = argname + results = [] - if argname in req.args: - results.extend(req.args[argname]) - argname_unicode = str(argname, "utf-8") + if argname_bytes in req.args: + results.extend(req.args[argname_bytes]) + argname_unicode = str(argname_bytes, "utf-8") if req.fields and argname_unicode in req.fields: value = req.fields[argname_unicode].value if isinstance(value, str): @@ -742,6 +741,9 @@ def get_arg(req, argname, default=None, multiple=False): # type: (IRequest, Uni return tuple(results) if results: return results[0] + + if isinstance(default, str): + return default.encode("utf-8") return default @@ -833,3 +835,14 @@ def abbreviate_time(data): if s >= 0.001: return u"%.1fms" % (1000*s) return u"%.0fus" % (1000000*s) + +def get_keypair(request: IRequest) -> tuple[PublicKey, PrivateKey] | None: + """ + Load a keypair from a urlsafe-base64-encoded RSA private key in the + **private-key** argument of the given request, if there is one. + """ + privkey_der = get_arg(request, "private-key", default=None, multiple=False) + if privkey_der is None: + return None + privkey, pubkey = create_signing_keypair_from_string(urlsafe_b64decode(privkey_der)) + return pubkey, privkey diff --git a/src/allmydata/web/filenode.py b/src/allmydata/web/filenode.py index dd793888e..680ca3331 100644 --- a/src/allmydata/web/filenode.py +++ b/src/allmydata/web/filenode.py @@ -1,23 +1,12 @@ """ Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, max, min # noqa: F401 - # Use native unicode() as str() to prevent leaking futurebytes in ways that - # break string formattin. - from past.builtins import unicode as str -from past.builtins import long +from __future__ import annotations from twisted.web import http, static from twisted.internet import defer from twisted.web.resource import ( - Resource, # note: Resource is an old-style class + Resource, ErrorPage, ) @@ -34,6 +23,7 @@ from allmydata.blacklist import ( ) from allmydata.web.common import ( + get_keypair, boolean_of_arg, exception_to_child, get_arg, @@ -56,7 +46,6 @@ from allmydata.web.check_results import ( from allmydata.web.info import MoreInfo from allmydata.util import jsonbytes as json - class ReplaceMeMixin(object): def replace_me_with_a_child(self, req, client, replace): # a new file is being uploaded in our place. @@ -64,7 +53,8 @@ class ReplaceMeMixin(object): mutable_type = get_mutable_type(file_format) if mutable_type is not None: data = MutableFileHandle(req.content) - d = client.create_mutable_file(data, version=mutable_type) + keypair = get_keypair(req) + d = client.create_mutable_file(data, version=mutable_type, unique_keypair=keypair) def _uploaded(newnode): d2 = self.parentnode.set_node(self.name, newnode, overwrite=replace) @@ -106,7 +96,8 @@ class ReplaceMeMixin(object): if file_format in ("SDMF", "MDMF"): mutable_type = get_mutable_type(file_format) uploadable = MutableFileHandle(contents.file) - d = client.create_mutable_file(uploadable, version=mutable_type) + keypair = get_keypair(req) + d = client.create_mutable_file(uploadable, version=mutable_type, unique_keypair=keypair) def _uploaded(newnode): d2 = self.parentnode.set_node(self.name, newnode, overwrite=replace) @@ -395,7 +386,7 @@ class FileDownloader(Resource, object): # list of (first,last) inclusive range tuples. filesize = self.filenode.get_size() - assert isinstance(filesize, (int,long)), filesize + assert isinstance(filesize, int), filesize try: # byte-ranges-specifier @@ -408,19 +399,19 @@ class FileDownloader(Resource, object): if first == '': # suffix-byte-range-spec - first = filesize - long(last) + first = filesize - int(last) last = filesize - 1 else: # byte-range-spec # first-byte-pos - first = long(first) + first = int(first) # last-byte-pos if last == '': last = filesize - 1 else: - last = long(last) + last = int(last) if last < first: raise ValueError @@ -456,7 +447,7 @@ class FileDownloader(Resource, object): b'attachment; filename="%s"' % self.filename) filesize = self.filenode.get_size() - assert isinstance(filesize, (int,long)), filesize + assert isinstance(filesize, int), filesize first, size = 0, None contentsize = filesize req.setHeader("accept-ranges", "bytes") diff --git a/src/allmydata/web/status.py b/src/allmydata/web/status.py index 65647f491..4a902a98b 100644 --- a/src/allmydata/web/status.py +++ b/src/allmydata/web/status.py @@ -550,7 +550,7 @@ class DownloadStatusElement(Element): length = r_ev["length"] bytes_returned = r_ev["bytes_returned"] decrypt_time = "" - if bytes: + if bytes_returned: decrypt_time = self._rate_and_time(bytes_returned, r_ev["decrypt_time"]) speed, rtt = "","" if r_ev["finish_time"] is not None: @@ -1616,30 +1616,30 @@ class StatisticsElement(Element): @renderer def uploads(self, req, tag): files = self._stats["counters"].get("uploader.files_uploaded", 0) - bytes = self._stats["counters"].get("uploader.bytes_uploaded", 0) + bytes_uploaded = self._stats["counters"].get("uploader.bytes_uploaded", 0) return tag(("%s files / %s bytes (%s)" % - (files, bytes, abbreviate_size(bytes)))) + (files, bytes_uploaded, abbreviate_size(bytes_uploaded)))) @renderer def downloads(self, req, tag): files = self._stats["counters"].get("downloader.files_downloaded", 0) - bytes = self._stats["counters"].get("downloader.bytes_downloaded", 0) + bytes_uploaded = self._stats["counters"].get("downloader.bytes_downloaded", 0) return tag("%s files / %s bytes (%s)" % - (files, bytes, abbreviate_size(bytes))) + (files, bytes_uploaded, abbreviate_size(bytes_uploaded))) @renderer def publishes(self, req, tag): files = self._stats["counters"].get("mutable.files_published", 0) - bytes = self._stats["counters"].get("mutable.bytes_published", 0) - return tag("%s files / %s bytes (%s)" % (files, bytes, - abbreviate_size(bytes))) + bytes_uploaded = self._stats["counters"].get("mutable.bytes_published", 0) + return tag("%s files / %s bytes (%s)" % (files, bytes_uploaded, + abbreviate_size(bytes_uploaded))) @renderer def retrieves(self, req, tag): files = self._stats["counters"].get("mutable.files_retrieved", 0) - bytes = self._stats["counters"].get("mutable.bytes_retrieved", 0) - return tag("%s files / %s bytes (%s)" % (files, bytes, - abbreviate_size(bytes))) + bytes_uploaded = self._stats["counters"].get("mutable.bytes_retrieved", 0) + return tag("%s files / %s bytes (%s)" % (files, bytes_uploaded, + abbreviate_size(bytes_uploaded))) @renderer def raw(self, req, tag): diff --git a/src/allmydata/web/unlinked.py b/src/allmydata/web/unlinked.py index 425622496..2c7be6f30 100644 --- a/src/allmydata/web/unlinked.py +++ b/src/allmydata/web/unlinked.py @@ -1,14 +1,7 @@ """ Ported to Python 3. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations from urllib.parse import quote as urlquote @@ -25,6 +18,7 @@ from twisted.web.template import ( from allmydata.immutable.upload import FileHandle from allmydata.mutable.publish import MutableFileHandle from allmydata.web.common import ( + get_keypair, get_arg, boolean_of_arg, convert_children_json, @@ -48,7 +42,8 @@ def PUTUnlinkedSSK(req, client, version): # SDMF: files are small, and we can only upload data req.content.seek(0) data = MutableFileHandle(req.content) - d = client.create_mutable_file(data, version=version) + keypair = get_keypair(req) + d = client.create_mutable_file(data, version=version, unique_keypair=keypair) d.addCallback(lambda n: n.get_uri()) return d diff --git a/src/allmydata/webish.py b/src/allmydata/webish.py index 519b3e1f0..1b2b8192a 100644 --- a/src/allmydata/webish.py +++ b/src/allmydata/webish.py @@ -1,18 +1,12 @@ """ -Ported to Python 3. +General web server-related utilities. """ -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -from future.utils import PY2 -if PY2: - from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 +from __future__ import annotations from six import ensure_str import re, time, tempfile +from urllib.parse import parse_qsl, urlencode from cgi import ( FieldStorage, @@ -45,40 +39,37 @@ from .web.storage_plugins import ( ) -if PY2: - FileUploadFieldStorage = FieldStorage -else: - class FileUploadFieldStorage(FieldStorage): - """ - Do terrible things to ensure files are still bytes. +class FileUploadFieldStorage(FieldStorage): + """ + Do terrible things to ensure files are still bytes. - On Python 2, uploaded files were always bytes. On Python 3, there's a - heuristic: if the filename is set on a field, it's assumed to be a file - upload and therefore bytes. If no filename is set, it's Unicode. + On Python 2, uploaded files were always bytes. On Python 3, there's a + heuristic: if the filename is set on a field, it's assumed to be a file + upload and therefore bytes. If no filename is set, it's Unicode. - Unfortunately, we always want it to be bytes, and Tahoe-LAFS also - enables setting the filename not via the MIME filename, but via a - separate field called "name". + Unfortunately, we always want it to be bytes, and Tahoe-LAFS also + enables setting the filename not via the MIME filename, but via a + separate field called "name". - Thus we need to do this ridiculous workaround. Mypy doesn't like it - either, thus the ``# type: ignore`` below. + Thus we need to do this ridiculous workaround. Mypy doesn't like it + either, thus the ``# type: ignore`` below. - Source for idea: - https://mail.python.org/pipermail/python-dev/2017-February/147402.html - """ - @property # type: ignore - def filename(self): - if self.name == "file" and not self._mime_filename: - # We use the file field to upload files, see directory.py's - # _POST_upload. Lack of _mime_filename means we need to trick - # FieldStorage into thinking there is a filename so it'll - # return bytes. - return "unknown-filename" - return self._mime_filename + Source for idea: + https://mail.python.org/pipermail/python-dev/2017-February/147402.html + """ + @property # type: ignore + def filename(self): + if self.name == "file" and not self._mime_filename: + # We use the file field to upload files, see directory.py's + # _POST_upload. Lack of _mime_filename means we need to trick + # FieldStorage into thinking there is a filename so it'll + # return bytes. + return "unknown-filename" + return self._mime_filename - @filename.setter - def filename(self, value): - self._mime_filename = value + @filename.setter + def filename(self, value): + self._mime_filename = value class TahoeLAFSRequest(Request, object): @@ -180,12 +171,7 @@ def _logFormatter(logDateTime, request): queryargs = b"" else: path, queryargs = x - # there is a form handler which redirects POST /uri?uri=FOO into - # GET /uri/FOO so folks can paste in non-HTTP-prefixed uris. Make - # sure we censor these too. - if queryargs.startswith(b"uri="): - queryargs = b"uri=[CENSORED]" - queryargs = b"?" + queryargs + queryargs = b"?" + censor(queryargs) if path.startswith(b"/uri/"): path = b"/uri/[CENSORED]" elif path.startswith(b"/file/"): @@ -207,6 +193,30 @@ def _logFormatter(logDateTime, request): ) +def censor(queryargs: bytes) -> bytes: + """ + Replace potentially sensitive values in query arguments with a + constant string. + """ + args = parse_qsl(queryargs.decode("ascii"), keep_blank_values=True, encoding="utf8") + result = [] + for k, v in args: + if k == "uri": + # there is a form handler which redirects POST /uri?uri=FOO into + # GET /uri/FOO so folks can paste in non-HTTP-prefixed uris. Make + # sure we censor these. + v = "[CENSORED]" + elif k == "private-key": + # Likewise, sometimes a private key is supplied with mutable + # creation. + v = "[CENSORED]" + + result.append((k, v)) + + # Customize safe to try to leave our markers intact. + return urlencode(result, safe="[]").encode("ascii") + + class TahoeLAFSSite(Site, object): """ The HTTP protocol factory used by Tahoe-LAFS. diff --git a/tests.nix b/tests.nix index dd477c273..f8ed678f3 100644 --- a/tests.nix +++ b/tests.nix @@ -5,7 +5,7 @@ in { pkgsVersion ? "nixpkgs-21.11" , pkgs ? import sources.${pkgsVersion} { } , pypiData ? sources.pypi-deps-db -, pythonVersion ? "python37" +, pythonVersion ? "python39" , mach-nix ? import sources.mach-nix { inherit pkgs pypiData; python = pythonVersion; @@ -21,7 +21,7 @@ let inherit pkgs; lib = pkgs.lib; }; - tests_require = (mach-lib.extract "python37" ./. "extras_require" ).extras_require.test; + tests_require = (mach-lib.extract "python39" ./. "extras_require" ).extras_require.test; # Get the Tahoe-LAFS package itself. This does not include test # requirements and we don't ask for test requirements so that we can just diff --git a/tox.ini b/tox.ini index fc95a0469..3e2dacbb2 100644 --- a/tox.ini +++ b/tox.ini @@ -7,11 +7,9 @@ # the tox-gh-actions package. [gh-actions] python = - 3.7: py37-coverage,typechecks,codechecks 3.8: py38-coverage 3.9: py39-coverage 3.10: py310-coverage - pypy-3.7: pypy37 pypy-3.8: pypy38 pypy-3.9: pypy39 @@ -19,7 +17,7 @@ python = twisted = 1 [tox] -envlist = typechecks,codechecks,py{37,38,39,310}-{coverage},pypy27,pypy37,pypy38,pypy39,integration +envlist = typechecks,codechecks,py{38,39,310}-{coverage},pypy27,pypy38,pypy39,integration minversion = 2.4 [testenv] @@ -49,8 +47,6 @@ deps = # regressions in new releases of this package that cause us the kind of # suffering we're trying to avoid with the above pins. certifi - # VCS hooks support - py37,!coverage: pre-commit # We add usedevelop=False because testing against a true installation gives # more useful results. @@ -86,7 +82,6 @@ commands = coverage: python -b -m coverage run -m twisted.trial {env:TAHOE_LAFS_TRIAL_ARGS:--rterrors --reporter=timing} {posargs:{env:TEST_SUITE}} coverage: coverage combine coverage: coverage xml - coverage: coverage report [testenv:integration] basepython = python3 @@ -99,7 +94,6 @@ commands = # NOTE: 'run with "py.test --keep-tempdir -s -v integration/" to debug failures' py.test --timeout=1800 --coverage -s -v {posargs:integration} coverage combine - coverage report [testenv:codechecks]