all:
  hosts:
    ubuntu-noble:
      ansible_connection: ssh
      ansible_host: 81.163.193.135
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: ebbe2f5b-fa26-40c2-b301-085a646ce34c
        host_id: de4c9765152b8ccf16bcbbf90e33fb083884dc744cc344501046bc88
        interface_ip: 81.163.193.135
        label: ubuntu-noble
        private_ipv4: 10.128.7.138
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.135
        public_ipv6: ''
        region: null
        slot: null
  vars:
    zuul:
      _inheritance_path:
      - '<Job base branches: None source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job yamllint branches: None source: osism/zuul-jobs/.zuul.yaml@main#59>'
      - '<Job yamllint branches: None source: osism/container-images/.zuul.yaml@main#2>'
      ansible_version: '8'
      attempts: 1
      branch: main
      build: bd912a52e575460baa22387df85ca419
      buildset: 1408958e80674c8488bda10fa117fd08
      change: '709'
      change_message: "chore(deps): update netbox\n\nThis PR contains the following\
        \ updates:\n\n| Package | Type | Update | Change | Age | Adoption | Passing\
        \ | Confidence |\n|---|---|---|---|---|---|---|---|\n| [ghcr.io/astral-sh/uv](https://redirect.github.com/astral-sh/uv)\
        \ | final | minor | `0.6.11` -> `0.7.0` | [![age](https://developer.mend.io/api/mc/badges/age/docker/ghcr.io%2fastral-sh%2fuv/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![adoption](https://developer.mend.io/api/mc/badges/adoption/docker/ghcr.io%2fastral-sh%2fuv/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![passing](https://developer.mend.io/api/mc/badges/compatibility/docker/ghcr.io%2fastral-sh%2fuv/0.6.11/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/ghcr.io%2fastral-sh%2fuv/0.6.11/0.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ |\n| [netbox-plugin-dns](https://redirect.github.com/peteeckel/netbox-plugin-dns)\
        \ |  | patch | `==1.2.6` -> `==1.2.9` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/netbox-plugin-dns/1.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/netbox-plugin-dns/1.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/netbox-plugin-dns/1.2.6/1.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/netbox-plugin-dns/1.2.6/1.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ |\n| [quay.io/netboxcommunity/netbox](https://redirect.github.com/netbox-community/netbox-docker)\
        \ |  | patch | `v4.2.2` -> `v4.2.8` | [![age](https://developer.mend.io/api/mc/badges/age/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![adoption](https://developer.mend.io/api/mc/badges/adoption/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![passing](https://developer.mend.io/api/mc/badges/compatibility/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.2/v4.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.2/v4.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ |\n| [quay.io/netboxcommunity/netbox](https://redirect.github.com/netbox-community/netbox-docker)\
        \ | stage | patch | `v4.2.2` -> `v4.2.8` | [![age](https://developer.mend.io/api/mc/badges/age/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![adoption](https://developer.mend.io/api/mc/badges/adoption/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![passing](https://developer.mend.io/api/mc/badges/compatibility/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.2/v4.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.2/v4.2.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ |\n\n---\n\n### Release Notes\n\n<details>\n<summary>astral-sh/uv (ghcr.io/astral-sh/uv)</summary>\n\
        \n### [`v0.7.0`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#070)\n\
        \nThis release contains various changes that improve correctness and user\
        \ experience, but could break some workflows; many changes have been marked\
        \ as breaking out of an abundance of caution. We expect most users to be able\
        \ to upgrade without making changes.\n\n##### Breaking changes\n\n-   **Update\
        \ `uv version` to display and update project versions ([#&#8203;12349](https://redirect.github.com/astral-sh/uv/pull/12349))**\n\
        \n    Previously, `uv version` displayed uv's version. Now, `uv version` will\
        \ display or update the project's version. This interface was [heavily requested](https://redirect.github.com/astral-sh/uv/issues/6298)\
        \ and, after much consideration, we decided that transitioning the top-level\
        \ command was the best option.\n\n    Here's a brief example:\n\n    ```console\n\
        \    $ uv init example\n    Initialized project `example` at `./example`\n\
        \    $ cd example\n    $ uv version\n    example 0.1.0\n    $ uv version --bump\
        \ major\n    example 0.1.0 => 1.0.0\n    $ uv version --short\n    1.0.0\n\
        \    ```\n\n    If used outside of a project, uv will fallback to showing\
        \ its own version still:\n\n    ```console\n    $ uv version\n    warning:\
        \ failed to read project: No `pyproject.toml` found in current directory or\
        \ any parent directory\n      running `uv self version` for compatibility\
        \ with old `uv version` command.\n      this fallback will be removed soon,\
        \ pass `--preview` to make this an error.\n\n    uv 0.7.0 (4433f41c9 2025-04-29)\n\
        \    ```\n\n    As described in the warning, `--preview` can be used to error\
        \ instead:\n\n    ```console\n    $ uv version --preview\n    error: No `pyproject.toml`\
        \ found in current directory or any parent directory\n    ```\n\n    The previous\
        \ functionality of `uv version` was moved to `uv self version`.\n\n-   **Avoid\
        \ fallback to subsequent indexes on authentication failure ([#&#8203;12805](https://redirect.github.com/astral-sh/uv/pull/12805))**\n\
        \n    When using the `first-index` strategy (the default), uv will stop searching\
        \ indexes for a package once it is found on a single index. Previously, uv\
        \ considered a package as \"missing\" from an index during authentication\
        \ failures, such as an HTTP 401 or HTTP 403 (normally, missing packages are\
        \ represented by an HTTP 404). This behavior was motivated by unusual responses\
        \ from some package indexes, but reduces the safety of uv's index strategy\
        \ when authentication fails. Now, uv will consider an authentication failure\
        \ as a stop-point when searching for a package across indexes. The `index.ignore-error-codes`\
        \ option can be used to recover the existing behavior, e.g.:\n\n    ```toml\n\
        \    [[tool.uv.index]]\n    name = \"pytorch\"\n    url = \"https://download.pytorch.org/whl/cpu\"\
        \n    ignore-error-codes = [401, 403]\n    ```\n\n    Since PyTorch's indexes\
        \ always return a HTTP 403 for missing packages, uv special-cases indexes\
        \ on the `pytorch.org` domain to ignore that error code by default.\n\n- \
        \  **Require the command in `uvx <name>` to be available in the Python environment\
        \ ([#&#8203;11603](https://redirect.github.com/astral-sh/uv/pull/11603))**\n\
        \n    Previously, `uvx` would attempt to execute a command even if it was\
        \ not provided by a Python package. For example, if we presume `foo` is an\
        \ empty Python package which provides no command, `uvx foo` would invoke the\
        \ `foo` command on the `PATH` (if present). Now, uv will error early if the\
        \ `foo` executable is not provided by the requested Python package. This check\
        \ is not enforced when `--from` is used, so patterns like `uvx --from foo\
        \ bash -c \"...\"` are still valid. uv also still allows `uvx foo` where the\
        \ `foo` executable is provided by a dependency of `foo` instead of `foo` itself,\
        \ as this is fairly common for packages which depend on a dedicated package\
        \ for their command-line interface.\n\n-   **Use index URL instead of package\
        \ URL for keyring credential lookups ([#&#8203;12651](https://redirect.github.com/astral-sh/uv/pull/12651))**\n\
        \n    When determining credentials for querying a package URL, uv previously\
        \ sent the full URL to the `keyring` command. However, some keyring plugins\
        \ expect to receive the *index URL* (which is usually a parent of the package\
        \ URL). Now, uv requests credentials for the index URL instead. This behavior\
        \ matches `pip`.\n\n-   **Remove `--version` from subcommands ([#&#8203;13108](https://redirect.github.com/astral-sh/uv/pull/13108))**\n\
        \n    Previously, uv allowed the `--version` flag on arbitrary subcommands,\
        \ e.g., `uv run --version`. However, the `--version` flag is useful for other\
        \ operations since uv is a package manager. Consequently, we've removed the\
        \ `--version` flag from subcommands \u2014 it is only available as `uv --version`.\n\
        \n-   **Omit Python 3.7 downloads from managed versions ([#&#8203;13022](https://redirect.github.com/astral-sh/uv/pull/13022))**\n\
        \n    Python 3.7 is EOL and not formally supported by uv; however, Python\
        \ 3.7 was previously available for download on a subset of platforms.\n\n\
        -   **Reject non-PEP 751 TOML files in install, compile, and export commands\
        \ ([#&#8203;13120](https://redirect.github.com/astral-sh/uv/pull/13120), [#&#8203;13119](https://redirect.github.com/astral-sh/uv/pull/13119))**\n\
        \n    Previously, uv treated arbitrary `.toml` files passed to commands (e.g.,\
        \ `uv pip install -r foo.toml` or `uv pip compile -o foo.toml`) as `requirements.txt`-formatted\
        \ files. Now, uv will error instead. If using PEP 751 lockfiles, use the standardized\
        \ format for custom names instead, e.g., `pylock.foo.toml`.\n\n-   **Ignore\
        \ arbitrary Python requests in version files ([#&#8203;12909](https://redirect.github.com/astral-sh/uv/pull/12909))**\n\
        \n    uv allows arbitrary strings to be used for Python version requests,\
        \ in which they are treated as an executable name to search for in the `PATH`.\
        \ However, using this form of request in `.python-version` files is non-standard\
        \ and conflicts with `pyenv-virtualenv` which writes environment names to\
        \ `.python-version` files. In this release, uv will now ignore requests that\
        \ are arbitrary strings when found in `.python-version` files.\n\n-   **Error\
        \ on unknown dependency object specifiers ([12811](https://redirect.github.com/astral-sh/uv/pull/12811))**\n\
        \n    The `[dependency-groups]` entries can include \"object specifiers\"\
        , e.g. `set-phasers-to = ...` in:\n\n    ```toml\n    [dependency-groups]\n\
        \    foo = [\"pyparsing\"]\n    bar = [{set-phasers-to = \"stun\"}]\n    ```\n\
        \n    However, the only current spec-compliant object specifier is `include-group`.\
        \ Previously, uv would ignore unknown object specifiers. Now, uv will error.\n\
        \n-   **Make `--frozen` and `--no-sources` conflicting options ([#&#8203;12671](https://redirect.github.com/astral-sh/uv/pull/12671))**\n\
        \n    Using `--no-sources` always requires a new resolution and `--frozen`\
        \ will always fail when used with it. Now, this conflict is encoded in the\
        \ CLI options for clarity.\n\n-   **Treat empty `UV_PYTHON_INSTALL_DIR` and\
        \ `UV_TOOL_DIR` as unset ([#&#8203;12907](https://redirect.github.com/astral-sh/uv/pull/12907),\
        \ [#&#8203;12905](https://redirect.github.com/astral-sh/uv/pull/12905))**\n\
        \n    Previously, these variables were treated as set to the current working\
        \ directory when set to an empty string. Now, uv will ignore these variables\
        \ when empty. This matches uv's behavior for other environment variables which\
        \ configure directories.\n\n##### Enhancements\n\n-   Disallow mixing requirements\
        \ across PyTorch indexes ([#&#8203;13179](https://redirect.github.com/astral-sh/uv/pull/13179))\n\
        -   Add optional managed Python archive download cache ([#&#8203;12175](https://redirect.github.com/astral-sh/uv/pull/12175))\n\
        -   Add `poetry-core` as a `uv init` build backend option ([#&#8203;12781](https://redirect.github.com/astral-sh/uv/pull/12781))\n\
        -   Show tag hints when failing to find a compatible wheel in `pylock.toml`\
        \ ([#&#8203;13136](https://redirect.github.com/astral-sh/uv/pull/13136))\n\
        -   Report Python versions in `pyvenv.cfg` version mismatch ([#&#8203;13027](https://redirect.github.com/astral-sh/uv/pull/13027))\n\
        \n##### Bug fixes\n\n-   Avoid erroring on omitted wheel-only packages in\
        \ `pylock.toml` ([#&#8203;13132](https://redirect.github.com/astral-sh/uv/pull/13132))\n\
        -   Fix display name for `uvx --version` ([#&#8203;13109](https://redirect.github.com/astral-sh/uv/pull/13109))\n\
        -   Restore handling of authentication when encountering redirects ([#&#8203;13050](https://redirect.github.com/astral-sh/uv/pull/13050))\n\
        -   Respect build options (`--no-binary` et al) in `pylock.toml` ([#&#8203;13134](https://redirect.github.com/astral-sh/uv/pull/13134))\n\
        -   Use `upload-time` rather than `upload_time` in `uv.lock` ([#&#8203;13176](https://redirect.github.com/astral-sh/uv/pull/13176))\n\
        \n##### Documentation\n\n-   Changed `fish` completions append `>>` to overwrite\
        \ `>` ([#&#8203;13130](https://redirect.github.com/astral-sh/uv/pull/13130))\n\
        -   Add `pylock.toml` mentions where relevant ([#&#8203;13115](https://redirect.github.com/astral-sh/uv/pull/13115))\n\
        -   Add ROCm example to the PyTorch guide ([#&#8203;13200](https://redirect.github.com/astral-sh/uv/pull13200))\n\
        -   Upgrade PyTorch guide to CUDA 12.8 and PyTorch 2.7 ([#&#8203;13199](https://redirect.github.com/astral-sh/uv/pull13199))\n\
        \n### [`v0.6.17`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0617)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.16...0.6.17)\n\
        \n##### Preview features\n\n-   Add PyTorch v2.7.0 to GPU backend ([#&#8203;13072](https://redirect.github.com/astral-sh/uv/pull/13072))\n\
        \n##### Bug fixes\n\n-   Avoid panic for invalid Python versions ([#&#8203;13077](https://redirect.github.com/astral-sh/uv/pull/13077))\n\
        -   Block scripts from overwriting `python` ([#&#8203;13051](https://redirect.github.com/astral-sh/uv/pull/13051))\n\
        -   Check distribution names to handle invalid redirects ([#&#8203;12917](https://redirect.github.com/astral-sh/uv/pull/12917))\n\
        -   Check for mismatched package and distribution names on resolver thread\
        \ ([#&#8203;13088](https://redirect.github.com/astral-sh/uv/pull/13088))\n\
        -   Fix panic with invalid last character in PEP 508 name ([#&#8203;13105](https://redirect.github.com/astral-sh/uv/pull/13105))\n\
        -   Reject `requires-python` even if not listed on the index page ([#&#8203;13086](https://redirect.github.com/astral-sh/uv/pull/13086))\n\
        \n### [`v0.6.16`](https://redirect.github.com/astral-sh/uv/releases/tag/0.6.16)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.15...0.6.16)\n\
        \n#### Release Notes\n\n##### Bug fixes\n\n-   Revert \"Properly handle authentication\
        \ for 302 redirect URLs\" ([#&#8203;13041](https://redirect.github.com/astral-sh/uv/pull/13041))\n\
        \n#### Install uv 0.6.16\n\n##### Install prebuilt binaries via shell script\n\
        \n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.16/uv-installer.sh\
        \ | sh\n```\n\n##### Install prebuilt binaries via powershell script\n\n```sh\n\
        powershell -ExecutionPolicy Bypass -c \"irm https://github.com/astral-sh/uv/releases/download/0.6.16/uv-installer.ps1\
        \ | iex\"\n```\n\n#### Download uv 0.6.16\n\n|  File  | Platform | Checksum\
        \ |\n|--------|----------|----------|\n| [uv-aarch64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-apple-darwin.tar.gz)\
        \ | Apple Silicon macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-apple-darwin.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-apple-darwin.tar.gz.sha256) |\n| [uv-aarch64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-pc-windows-msvc.zip)\
        \ | ARM64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-i686-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-pc-windows-msvc.zip)\
        \ | x86 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-x86\\_64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-pc-windows-msvc.zip.sha256) |\n| [uv-aarch64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-unknown-linux-gnu.tar.gz)\
        \ | ARM64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-unknown-linux-gnu.tar.gz)\
        \ | x86 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-powerpc64-unknown-linux-gnu.tar.gz)\
        \ | PPC64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-powerpc64le-unknown-linux-gnu.tar.gz)\
        \ | PPC64LE Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-s390x-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-s390x-unknown-linux-gnu.tar.gz)\
        \ | S390x Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-s390x-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-armv7-unknown-linux-gnueabihf.tar.gz)\
        \ | ARMv7 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256)\
        \ |\n| [uv-aarch64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-unknown-linux-musl.tar.gz)\
        \ | ARM64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-unknown-linux-musl.tar.gz)\
        \ | x86 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-arm-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-arm-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-arm-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-armv7-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv7 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n\n### [`v0.6.15`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0615)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.14...0.6.15)\n\
        \nThis release includes preliminary support for the `pylock.toml` file format,\
        \ as standardized in [PEP 751](https://peps.python.org/pep-0751/). `pylock.toml`\
        \ is an alternative resolution output format intended to replace `requirements.txt`\
        \ (e.g., in the context of `uv pip compile`, whereby a \"locked\" `requirements.txt`\
        \ file is generated from a set of input requirements). `pylock.toml` is standardized\
        \ and tool-agnostic, such that in the future, `pylock.toml` files generated\
        \ by uv could be installed by other tools, and vice versa.\n\nAs of this release,\
        \ `pylock.toml` is supported in the following commands:\n\n-   To export a\
        \ `uv.lock` to the `pylock.toml` format, run: `uv export -o pylock.toml`\n\
        -   To generate a `pylock.toml` file from a set of requirements, run: `uv\
        \ pip compile -o pylock.toml requirements.in`\n-   To install from a `pylock.toml`\
        \ file, run: `uv pip sync pylock.toml` or `uv pip install -r pylock.toml`\n\
        \n##### Enhancements\n\n-   Add PEP 751 support to `uv pip compile` ([#&#8203;13019](https://redirect.github.com/astral-sh/uv/pull/13019))\n\
        -   Add `uv export` support for PEP 751 ([#&#8203;12955](https://redirect.github.com/astral-sh/uv/pull/12955))\n\
        -   Accept `requirements.txt` (verbatim) as a format on the CLI ([#&#8203;12957](https://redirect.github.com/astral-sh/uv/pull/12957))\n\
        -   Add `UV_NO_EDITABLE` environment variable to set `--no-editable` on all\
        \ invocations ([#&#8203;12773](https://redirect.github.com/astral-sh/uv/pull/12773))\n\
        -   Add `pylock.toml` to `uv pip install` and `uv pip sync` ([#&#8203;12992](https://redirect.github.com/astral-sh/uv/pull/12992))\n\
        -   Add a brief sleep before sending `SIGINT` to child processes ([#&#8203;13018](https://redirect.github.com/astral-sh/uv/pull/13018))\n\
        -   Add upload time to `uv.lock` ([#&#8203;12968](https://redirect.github.com/astral-sh/uv/pull/12968))\n\
        -   Allow updating Git sources by name ([#&#8203;12897](https://redirect.github.com/astral-sh/uv/pull/12897))\n\
        -   Cache `which git` in `uv init` ([#&#8203;12893](https://redirect.github.com/astral-sh/uv/pull/12893))\n\
        -   Enable `--dry-run` with `--locked` / `--frozen` for `uv sync` ([#&#8203;12778](https://redirect.github.com/astral-sh/uv/pull/12778))\n\
        -   Infer output type in `uv export` ([#&#8203;12958](https://redirect.github.com/astral-sh/uv/pull/12958))\n\
        -   Make `uv init` resilient against broken git ([#&#8203;12895](https://redirect.github.com/astral-sh/uv/pull/12895))\n\
        -   Respect build constraints for `uv run --with` dependencies ([#&#8203;12882](https://redirect.github.com/astral-sh/uv/pull/12882))\n\
        -   Split UV_INDEX on all whitespace ([#&#8203;12820](https://redirect.github.com/astral-sh/uv/pull/12820))\n\
        -   Support build constraints in `uv tool` and PEP723 scripts. ([#&#8203;12842](https://redirect.github.com/astral-sh/uv/pull/12842))\n\
        -   Use suffix from `uvx` binary when searching for uv binary ([#&#8203;12923](https://redirect.github.com/astral-sh/uv/pull/12923))\n\
        -   Update version formatting to use cyan color ([#&#8203;12943](https://redirect.github.com/astral-sh/uv/pull/12943))\n\
        -   Add debug logs for version file search ([#&#8203;12951](https://redirect.github.com/astral-sh/uv/pull/12951))\n\
        -   Fix `SourceNotAllowed` error message during Python discovery ([#&#8203;13012](https://redirect.github.com/astral-sh/uv/pull/13012))\n\
        -   Obfuscate password in credentials debug messages ([#&#8203;12944](https://redirect.github.com/astral-sh/uv/pull/12944))\n\
        -   Obfuscate possible tokens in URL logs ([#&#8203;12969](https://redirect.github.com/astral-sh/uv/pull/12969))\n\
        -   Validate that PEP 751 entries don't include multiple sources ([#&#8203;12993](https://redirect.github.com/astral-sh/uv/pull/12993))\n\
        \n##### Preview features\n\n-   Build backend: Add reference docs and schema\
        \ ([#&#8203;12803](https://redirect.github.com/astral-sh/uv/pull/12803))\n\
        \n##### Bug fixes\n\n-   Align supported `config-settings` with example in\
        \ docs ([#&#8203;12947](https://redirect.github.com/astral-sh/uv/pull/12947))\n\
        -   Ensure virtual environment is compatible with interpreter on sync ([#&#8203;12884](https://redirect.github.com/astral-sh/uv/pull/12884))\n\
        -   Fix `PythonDownloadRequest` parsing for partial keys ([#&#8203;12925](https://redirect.github.com/astral-sh/uv/pull/12925))\n\
        -   Fix pre-release exclusive comparison operator in `uv-pep440` ([#&#8203;12836](https://redirect.github.com/astral-sh/uv/pull/12836))\n\
        -   Forward additional signals to the child process in `uv run` ([#&#8203;13017](https://redirect.github.com/astral-sh/uv/pull/13017))\n\
        -   Omit PEP 751 version for source trees ([#&#8203;13030](https://redirect.github.com/astral-sh/uv/pull/13030))\n\
        -   Patch `CC` and `CCX` entries in sysconfig for cross-compiled `aarch64`\
        \ Python distributions ([#&#8203;12239](https://redirect.github.com/astral-sh/uv/pull/12239))\n\
        -   Properly handle authentication for HTTP 302 redirect URLs ([#&#8203;12920](https://redirect.github.com/astral-sh/uv/pull/12920))\n\
        -   Set 4MB stack size for all threads, introduce `UV_STACK_SIZE` ([#&#8203;12839](https://redirect.github.com/astral-sh/uv/pull/12839))\n\
        -   Show PyPy downloads during `uv python list` ([#&#8203;12915](https://redirect.github.com/astral-sh/uv/pull/12915))\n\
        -   Add `subdirectory` to Direct URL for local directories ([#&#8203;12971](https://redirect.github.com/astral-sh/uv/pull/12971))\n\
        -   Prefer stable releases over pre-releases in `uv python install` ([#&#8203;12194](https://redirect.github.com/astral-sh/uv/pull/12194))\n\
        -   Write requested Python variant to pin file in `uv init` ([#&#8203;12870](https://redirect.github.com/astral-sh/uv/pull/12870))\n\
        \n##### Documentation\n\n-   Fix CLI reference with code block ([#&#8203;12807](https://redirect.github.com/astral-sh/uv/pull/12807))\n\
        -   Fix lockfile note ([#&#8203;12793](https://redirect.github.com/astral-sh/uv/pull/12793))\n\
        -   Fix typo in a reference ([#&#8203;12858](https://redirect.github.com/astral-sh/uv/pull/12858))\n\
        -   Improve docs for `uv python list --only-downloads` and `--only-installed`\
        \ ([#&#8203;12916](https://redirect.github.com/astral-sh/uv/pull/12916))\n\
        -   Update note on lack of musl distributions to ARM-only ([#&#8203;12825](https://redirect.github.com/astral-sh/uv/pull/12825))\n\
        -   Add section on shebangs for scripts ([#&#8203;11553](https://redirect.github.com/astral-sh/uv/pull/11553))\n\
        -   Display aliases for long and short args in the CLI reference ([#&#8203;12824](https://redirect.github.com/astral-sh/uv/pull/12824))\n\
        -   Fix highlight line in explicit index documentation ([#&#8203;12887](https://redirect.github.com/astral-sh/uv/pull/12887))\n\
        -   Add explicit source (matching PyTorch guide) ([#&#8203;12844](https://redirect.github.com/astral-sh/uv/pull/12844))\n\
        -   Fix link to issue ([#&#8203;12823](https://redirect.github.com/astral-sh/uv/pull/12823))\n\
        -   Fix grammatical error in FastAPI guide ([#&#8203;12908](https://redirect.github.com/astral-sh/uv/pull/12908))\n\
        -   Add `--locked` to `uv sync` in GitHub Actions guide ([#&#8203;12819](https://redirect.github.com/astral-sh/uv/pull/12819))\n\
        -   Improve formatting for `\"all\"` `default-groups` setting documentation\
        \ ([#&#8203;12963](https://redirect.github.com/astral-sh/uv/pull/12963))\n\
        -   Replace `--frozen` with `--locked` in Docker integration guide ([#&#8203;12818](https://redirect.github.com/astral-sh/uv/pull/12818))\n\
        \n### [`v0.6.14`](https://redirect.github.com/astral-sh/uv/releases/tag/0.6.14)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.13...0.6.14)\n\
        \n#### Release Notes\n\n##### Python versions\n\nThe following Python versions\
        \ have been added:\n\n-   CPython 3.13.3\n-   CPython 3.12.10\n-   CPython\
        \ 3.11.12\n-   CPython 3.10.17\n-   CPython 3.9.22\n\nSee the [`python-build-standalone`\
        \ release notes](https://redirect.github.com/astral-sh/python-build-standalone/releases/tag/20250409)\
        \ for more details.\n\n##### Enhancements\n\n-   Add `uv-build` and `uv_build`\
        \ aliases to `uv init --build-backend` ([#&#8203;12776](https://redirect.github.com/astral-sh/uv/pull/12776))\n\
        -   Emit dedicated error message for Conda `environment.yml` files ([#&#8203;12669](https://redirect.github.com/astral-sh/uv/pull/12669))\n\
        \n##### Preview features\n\n-   Build backend: Check module dir exists for\
        \ sdist build ([#&#8203;12779](https://redirect.github.com/astral-sh/uv/pull/12779))\n\
        -   Build backend: Fix sdist with long directories ([#&#8203;12764](https://redirect.github.com/astral-sh/uv/pull/12764))\n\
        \n##### Performance\n\n-   Avoid querying GitHub on repeated install invocations\
        \ ([#&#8203;12767](https://redirect.github.com/astral-sh/uv/pull/12767))\n\
        \n##### Bug fixes\n\n-   Error when `tool.uv.sources` is set in system-level\
        \ configuration file ([#&#8203;12757](https://redirect.github.com/astral-sh/uv/pull/12757))\n\
        -   Split workspace members onto their own lines in `uv init` ([#&#8203;12756](https://redirect.github.com/astral-sh/uv/pull/12756))\n\
        \n##### Documentation\n\n-   Add lockfile note about PEP 751 ([#&#8203;12732](https://redirect.github.com/astral-sh/uv/pull/12732))\n\
        -   Extend the reference documentation for `uv pip sync` ([#&#8203;12683](https://redirect.github.com/astral-sh/uv/pull/12683))\n\
        -   Fix mismatched pip interface header / nav titles ([#&#8203;12640](https://redirect.github.com/astral-sh/uv/pull/12640))\n\
        \n### uv 0.6.14\n\n#### Install uv 0.6.14\n\n##### Install prebuilt binaries\
        \ via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.14/uv-installer.sh\
        \ | sh\n```\n\n##### Install prebuilt binaries via powershell script\n\n```sh\n\
        powershell -ExecutionPolicy Bypass -c \"irm https://github.com/astral-sh/uv/releases/download/0.6.14/uv-installer.ps1\
        \ | iex\"\n```\n\n#### Download uv 0.6.14\n\n|  File  | Platform | Checksum\
        \ |\n|--------|----------|----------|\n| [uv-aarch64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-apple-darwin.tar.gz)\
        \ | Apple Silicon macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-apple-darwin.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-apple-darwin.tar.gz.sha256) |\n| [uv-aarch64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-pc-windows-msvc.zip)\
        \ | ARM64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-i686-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-pc-windows-msvc.zip)\
        \ | x86 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-x86\\_64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-pc-windows-msvc.zip.sha256) |\n| [uv-aarch64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-unknown-linux-gnu.tar.gz)\
        \ | ARM64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-unknown-linux-gnu.tar.gz)\
        \ | x86 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-powerpc64-unknown-linux-gnu.tar.gz)\
        \ | PPC64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-powerpc64le-unknown-linux-gnu.tar.gz)\
        \ | PPC64LE Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-s390x-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-s390x-unknown-linux-gnu.tar.gz)\
        \ | S390x Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-s390x-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-armv7-unknown-linux-gnueabihf.tar.gz)\
        \ | ARMv7 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256)\
        \ |\n| [uv-aarch64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-unknown-linux-musl.tar.gz)\
        \ | ARM64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-unknown-linux-musl.tar.gz)\
        \ | x86 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-arm-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-arm-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-arm-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-armv7-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv7 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n\n### [`v0.6.13`](https://redirect.github.com/astral-sh/uv/releases/tag/0.6.13)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.12...0.6.13)\n\
        \n#### Release Notes\n\n##### Enhancements\n\n-   Add `--show-version` to\
        \ `uv python find` ([#&#8203;12376](https://redirect.github.com/astral-sh/uv/pull/12376))\n\
        -   Remove `--no-config` warning from `uv pip compile` and `uv pip sync` ([#&#8203;12642](https://redirect.github.com/astral-sh/uv/pull/12642))\n\
        -   Skip repeated directories in `PATH` when searching for Python interpreters\
        \ ([#&#8203;12367](https://redirect.github.com/astral-sh/uv/pull/12367))\n\
        -   Unset `SCRIPT_PATH` in relocatable activation script ([#&#8203;12672](https://redirect.github.com/astral-sh/uv/pull/12672))\n\
        -   Add `UV_PYTHON_DOWNLOADS_JSON_URL` to set custom managed python sources\
        \ ([#&#8203;10939](https://redirect.github.com/astral-sh/uv/pull/10939))\n\
        -   Reject `pyproject.toml` files in `uv pip compile -o` ([#&#8203;12673](https://redirect.github.com/astral-sh/uv/pull/12673))\n\
        -   Respect the `--offline` flag for Git operations ([#&#8203;12619](https://redirect.github.com/astral-sh/uv/pull/12619))\n\
        \n##### Bug fixes\n\n-   Warn instead of error if CRC appears to be missing\
        \ ([#&#8203;12722](https://redirect.github.com/astral-sh/uv/pull/12722))\n\
        -   Avoid infinite loop in `uv export` with conflicts ([#&#8203;12726](https://redirect.github.com/astral-sh/uv/pull/12726))\n\
        \n##### Rust API\n\n-   Update MSRV to 1.84 ([#&#8203;12670](https://redirect.github.com/astral-sh/uv/pull/12670))\n\
        \n### uv 0.6.13\n\n#### Install uv 0.6.13\n\n##### Install prebuilt binaries\
        \ via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.13/uv-installer.sh\
        \ | sh\n```\n\n##### Install prebuilt binaries via powershell script\n\n```sh\n\
        powershell -ExecutionPolicy Bypass -c \"irm https://github.com/astral-sh/uv/releases/download/0.6.13/uv-installer.ps1\
        \ | iex\"\n```\n\n#### Download uv 0.6.13\n\n|  File  | Platform | Checksum\
        \ |\n|--------|----------|----------|\n| [uv-aarch64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-apple-darwin.tar.gz)\
        \ | Apple Silicon macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-apple-darwin.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-apple-darwin.tar.gz.sha256) |\n| [uv-aarch64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-pc-windows-msvc.zip)\
        \ | ARM64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-i686-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-pc-windows-msvc.zip)\
        \ | x86 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-x86\\_64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-pc-windows-msvc.zip.sha256) |\n| [uv-aarch64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-unknown-linux-gnu.tar.gz)\
        \ | ARM64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-unknown-linux-gnu.tar.gz)\
        \ | x86 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-powerpc64-unknown-linux-gnu.tar.gz)\
        \ | PPC64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-powerpc64le-unknown-linux-gnu.tar.gz)\
        \ | PPC64LE Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-s390x-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-s390x-unknown-linux-gnu.tar.gz)\
        \ | S390x Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-s390x-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-armv7-unknown-linux-gnueabihf.tar.gz)\
        \ | ARMv7 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256)\
        \ |\n| [uv-aarch64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-unknown-linux-musl.tar.gz)\
        \ | ARM64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-unknown-linux-musl.tar.gz)\
        \ | x86 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-arm-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-arm-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-arm-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-armv7-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv7 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n\n### [`v0.6.12`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0612)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.11...0.6.12)\n\
        \n##### Enhancements\n\n-   Report the queried executable path in `uv python\
        \ list` ([#&#8203;12628](https://redirect.github.com/astral-sh/uv/pull/12628))\n\
        -   Improve archive unpack error messages ([#&#8203;12627](https://redirect.github.com/astral-sh/uv/pull/12627))\n\
        \n##### Bug fixes\n\n-   Respect `authenticate` when using `explicit = true`\
        \ ([#&#8203;12631](https://redirect.github.com/astral-sh/uv/pull/12631))\n\
        -   Normalize extra and group names in `uv add` and `uv remove` ([#&#8203;12586](https://redirect.github.com/astral-sh/uv/pull/12586))\n\
        -   Enforce CRC-32 checks when unpacking archives ([#&#8203;12623](https://redirect.github.com/astral-sh/uv/pull/12623))\n\
        -   Fix parsing of `python-platform` in settings files ([#&#8203;12592](https://redirect.github.com/astral-sh/uv/pull/12592))\n\
        \n##### Documentation\n\n-   Add note about `uv build` to `package = false`\
        \ ([#&#8203;12608](https://redirect.github.com/astral-sh/uv/pull/12608))\n\
        -   Add index fallback note to `authenticate = always` documentation ([#&#8203;12498](https://redirect.github.com/astral-sh/uv/pull/12498))\n\
        -   Fix invalid 'kind' reference in flat index docs ([#&#8203;12583](https://redirect.github.com/astral-sh/uv/pull/12583))\n\
        \n</details>\n\n<details>\n<summary>peteeckel/netbox-plugin-dns (netbox-plugin-dns)</summary>\n\
        \n### [`v1.2.9`](https://redirect.github.com/peteeckel/netbox-plugin-dns/releases/tag/1.2.9):\
        \ Feature release 1.2.9\n\n[Compare Source](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.8...1.2.9)\n\
        \n#### What's Changed\n\n-   Redesigned the record ChoiceSets and created\
        \ the `custom_record_types` option by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/599](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/599)\n\
        -   Provide a default list of filtered RRTYPEs by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/601](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/601)\n\
        -   slight change of wording by [@&#8203;jpmens](https://redirect.github.com/jpmens)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/602](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/602)\n\
        -   Added the option to remove specific record types from the filter list\
        \ by [@&#8203;peteeckel](https://redirect.github.com/peteeckel) in [https://github.com/peteeckel/netbox-plugin-dns/pull/604](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/604)\n\
        -   Introduced check for SOA-safe fields and added tests by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/606](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/606)\n\
        -   Added the parental_agents field to DNSSECPolicy by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/607](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/607)\n\
        -   Moved the parental_agents field from DNSSECPolicy to Zone by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/609](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/609)\n\
        \n**Full Changelog**: https://github.com/peteeckel/netbox-plugin-dns/compare/1.2.7...1.2.9\n\
        \n### [`v1.2.8`](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.7...1.2.8)\n\
        \n[Compare Source](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.7...1.2.8)\n\
        \n### [`v1.2.7`](https://redirect.github.com/peteeckel/netbox-plugin-dns/releases/tag/1.2.7):\
        \ Feature/Bugfix Release 1.2.7\n\n[Compare Source](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.6...1.2.7)\n\
        \n#### DNSSEC\n\nThis is release adds DNSSEC support for NetBox DNS.\n\nNetBox\
        \ DNS supports the management of DNSSEC in as much as DNSSEC Key Templates\
        \ and DNSSEC Policies can be stored in NetBox DNS and assigned to zones. It\
        \ does not, however, support zone signing nor storing cryptographic material\
        \ in the NetBox database. There are two main reasons for this concept:\n\n\
        1.  Storing cryptographic material in a data source for automation is generally\
        \ problematic. While there is the NetBox Secrets plugin, it is better practice\
        \ to store confidential data in vault systems specifically created for this\
        \ purpose. (In some cases the keys are stored in HSMs as an added method of\
        \ protection.)\n2.  In typical modern scenarios, signing servers maintain\
        \ keys and sign records, so such configurations do not even require having\
        \ NetBox DNS provide keys or create the signatures from within NetBox DNS.\n\
        \nAdditionally, there is no direct integration between NetBox and any given\
        \ name server implementation, so an interface for providing signed zones to\
        \ a name server is generally out of scope for NetBox DNS, just as it is the\
        \ case for serving plain DNS. This should be implemented using specific solutions\
        \ adapted to the use case and the name server implementation used.\n\nAs noted\
        \ earlier there are two data models for DNSSEC in NetBox DNS: DNSSEC Key Templates\
        \ and DNSSEC Policies. The former are used for storing parameters for DNSSEC\
        \ Keys such as the type, algorithm and lifetime, and the latter to define\
        \ policies that determine how often signatures are regenerated, DS records\
        \ are propagated etc.\n\nWhile the implementation is oriented largely towards\
        \ options BIND 9 provides, this is mainly because that software has a huge\
        \ set of configuration options and other products are usually not very different,\
        \ in most cases more limited than BIND 9. Given the large installed base of\
        \ BIND 9, this is considered a good basis. (There is, however, no reason why\
        \ NetBox DNS cannot be used to maintain data for, say, Knot-DNS or PowerDNS.)\n\
        \nFor a summary of the new functionality, see [this blogpost](https://jpmens.net/2025/03/16/dnssec-policy-and-key-template-support-in-netbox-dns/)\
        \ by [@&#8203;jpmens](https://redirect.github.com/jpmens).\n\n#### What's\
        \ Changed\n\n-   SOA MNAME must be checked in zone forms if zone template\
        \ is not set by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/589](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/589)\n\
        -   complete fr translation by [@&#8203;jean1](https://redirect.github.com/jean1)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/592](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/592)\n\
        -   Check whether zone was passed via dict before resolving templates by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/594](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/594)\n\
        -   Add DNSSEC support by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/563](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/563)\n\
        -   Add domain registration expiration date and EPP status fields by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/590](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/590)\n\
        -   Add tests for NetBox DNS objects as custom field targets by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/595](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/595)\n\
        -   Initialise views in `urls.py` instead of `ready()` by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/596](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/596)\n\
        \n**Full Changelog**: https://github.com/peteeckel/netbox-plugin-dns/compare/1.2.6...1.2.7\n\
        \n</details>\n\n---\n\n### Configuration\n\n\U0001F4C5 **Schedule**: Branch\
        \ creation - At any time (no schedule defined), Automerge - At any time (no\
        \ schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled by config. Please\
        \ merge this manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever\
        \ PR becomes conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F47B\
        \ **Immortal**: This PR will be recreated if closed unmerged. Get [config\
        \ help](https://redirect.github.com/renovatebot/renovate/discussions) if that's\
        \ undesired.\n\n---\n\n - [ ] <!-- rebase-check -->If you want to rebase/retry\
        \ this PR, check this box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).\
        \ View the [repository job log](https://developer.mend.io/github/osism/container-images).\n\
        <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjI1Ny4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
      change_url: https://github.com/osism/container-images/pull/709
      child_jobs: []
      commit_id: 9980e49e057b4d73e0e3671a997e24255af23010
      event_id: b1958100-254d-11f0-94a5-192f39ba8024
      executor:
        hostname: 7d211f194f6a
        inventory_file: /var/lib/zuul/builds/bd912a52e575460baa22387df85ca419/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/bd912a52e575460baa22387df85ca419/work/logs
        result_data_file: /var/lib/zuul/builds/bd912a52e575460baa22387df85ca419/work/results.json
        src_root: /var/lib/zuul/builds/bd912a52e575460baa22387df85ca419/work/src
        work_root: /var/lib/zuul/builds/bd912a52e575460baa22387df85ca419/work
      items:
      - branch: main
        change: '709'
        change_url: https://github.com/osism/container-images/pull/709
        patchset: 9980e49e057b4d73e0e3671a997e24255af23010
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          name: osism/container-images
          short_name: container-images
          src_dir: src/github.com/osism/container-images
      job: yamllint
      jobtags: []
      max_attempts: 3
      message: Y2hvcmUoZGVwcyk6IHVwZGF0ZSBuZXRib3gKClRoaXMgUFIgY29udGFpbnMgdGhlIGZvbGxvd2luZyB1cGRhdGVzOgoKfCBQYWNrYWdlIHwgVHlwZSB8IFVwZGF0ZSB8IENoYW5nZSB8IEFnZSB8IEFkb3B0aW9uIHwgUGFzc2luZyB8IENvbmZpZGVuY2UgfAp8LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwKfCBbZ2hjci5pby9hc3RyYWwtc2gvdXZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYpIHwgZmluYWwgfCBtaW5vciB8IGAwLjYuMTFgIC0+IGAwLjcuMGAgfCBbIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvZG9ja2VyL2doY3IuaW8lMmZhc3RyYWwtc2glMmZ1di8wLjcuMD9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFshW2Fkb3B0aW9uXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvYWRvcHRpb24vZG9ja2VyL2doY3IuaW8lMmZhc3RyYWwtc2glMmZ1di8wLjcuMD9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFshW3Bhc3NpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9jb21wYXRpYmlsaXR5L2RvY2tlci9naGNyLmlvJTJmYXN0cmFsLXNoJTJmdXYvMC42LjExLzAuNy4wP3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgWyFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvZG9ja2VyL2doY3IuaW8lMmZhc3RyYWwtc2glMmZ1di8wLjYuMTEvMC43LjA/c2xpbT10cnVlKV0oaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9tZXJnZS1jb25maWRlbmNlLykgfAp8IFtuZXRib3gtcGx1Z2luLWRuc10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucykgfCAgfCBwYXRjaCB8IGA9PTEuMi42YCAtPiBgPT0xLjIuOWAgfCBbIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvcHlwaS9uZXRib3gtcGx1Z2luLWRucy8xLjIuOT9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFshW2Fkb3B0aW9uXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvYWRvcHRpb24vcHlwaS9uZXRib3gtcGx1Z2luLWRucy8xLjIuOT9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFshW3Bhc3NpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9jb21wYXRpYmlsaXR5L3B5cGkvbmV0Ym94LXBsdWdpbi1kbnMvMS4yLjYvMS4yLjk/c2xpbT10cnVlKV0oaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9tZXJnZS1jb25maWRlbmNlLykgfCBbIVtjb25maWRlbmNlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29uZmlkZW5jZS9weXBpL25ldGJveC1wbHVnaW4tZG5zLzEuMi42LzEuMi45P3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwKfCBbcXVheS5pby9uZXRib3hjb21tdW5pdHkvbmV0Ym94XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbmV0Ym94LWNvbW11bml0eS9uZXRib3gtZG9ja2VyKSB8ICB8IHBhdGNoIHwgYHY0LjIuMmAgLT4gYHY0LjIuOGAgfCBbIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvZG9ja2VyL3F1YXkuaW8lMmZuZXRib3hjb21tdW5pdHklMmZuZXRib3gvdjQuMi44P3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgWyFbYWRvcHRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZG9wdGlvbi9kb2NrZXIvcXVheS5pbyUyZm5ldGJveGNvbW11bml0eSUyZm5ldGJveC92NC4yLjg/c2xpbT10cnVlKV0oaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9tZXJnZS1jb25maWRlbmNlLykgfCBbIVtwYXNzaW5nXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29tcGF0aWJpbGl0eS9kb2NrZXIvcXVheS5pbyUyZm5ldGJveGNvbW11bml0eSUyZm5ldGJveC92NC4yLjIvdjQuMi44P3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgWyFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvZG9ja2VyL3F1YXkuaW8lMmZuZXRib3hjb21tdW5pdHklMmZuZXRib3gvdjQuMi4yL3Y0LjIuOD9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8CnwgW3F1YXkuaW8vbmV0Ym94Y29tbXVuaXR5L25ldGJveF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25ldGJveC1jb21tdW5pdHkvbmV0Ym94LWRvY2tlcikgfCBzdGFnZSB8IHBhdGNoIHwgYHY0LjIuMmAgLT4gYHY0LjIuOGAgfCBbIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvZG9ja2VyL3F1YXkuaW8lMmZuZXRib3hjb21tdW5pdHklMmZuZXRib3gvdjQuMi44P3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgWyFbYWRvcHRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZG9wdGlvbi9kb2NrZXIvcXVheS5pbyUyZm5ldGJveGNvbW11bml0eSUyZm5ldGJveC92NC4yLjg/c2xpbT10cnVlKV0oaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9tZXJnZS1jb25maWRlbmNlLykgfCBbIVtwYXNzaW5nXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29tcGF0aWJpbGl0eS9kb2NrZXIvcXVheS5pbyUyZm5ldGJveGNvbW11bml0eSUyZm5ldGJveC92NC4yLjIvdjQuMi44P3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgWyFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvZG9ja2VyL3F1YXkuaW8lMmZuZXRib3hjb21tdW5pdHklMmZuZXRib3gvdjQuMi4yL3Y0LjIuOD9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8CgotLS0KCiMjIyBSZWxlYXNlIE5vdGVzCgo8ZGV0YWlscz4KPHN1bW1hcnk+YXN0cmFsLXNoL3V2IChnaGNyLmlvL2FzdHJhbC1zaC91dik8L3N1bW1hcnk+CgojIyMgW2B2MC43LjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDcwKQoKVGhpcyByZWxlYXNlIGNvbnRhaW5zIHZhcmlvdXMgY2hhbmdlcyB0aGF0IGltcHJvdmUgY29ycmVjdG5lc3MgYW5kIHVzZXIgZXhwZXJpZW5jZSwgYnV0IGNvdWxkIGJyZWFrIHNvbWUgd29ya2Zsb3dzOyBtYW55IGNoYW5nZXMgaGF2ZSBiZWVuIG1hcmtlZCBhcyBicmVha2luZyBvdXQgb2YgYW4gYWJ1bmRhbmNlIG9mIGNhdXRpb24uIFdlIGV4cGVjdCBtb3N0IHVzZXJzIHRvIGJlIGFibGUgdG8gdXBncmFkZSB3aXRob3V0IG1ha2luZyBjaGFuZ2VzLgoKIyMjIyMgQnJlYWtpbmcgY2hhbmdlcwoKLSAgICoqVXBkYXRlIGB1diB2ZXJzaW9uYCB0byBkaXNwbGF5IGFuZCB1cGRhdGUgcHJvamVjdCB2ZXJzaW9ucyAoWyMmIzgyMDM7MTIzNDldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjM0OSkpKioKCiAgICBQcmV2aW91c2x5LCBgdXYgdmVyc2lvbmAgZGlzcGxheWVkIHV2J3MgdmVyc2lvbi4gTm93LCBgdXYgdmVyc2lvbmAgd2lsbCBkaXNwbGF5IG9yIHVwZGF0ZSB0aGUgcHJvamVjdCdzIHZlcnNpb24uIFRoaXMgaW50ZXJmYWNlIHdhcyBbaGVhdmlseSByZXF1ZXN0ZWRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvaXNzdWVzLzYyOTgpIGFuZCwgYWZ0ZXIgbXVjaCBjb25zaWRlcmF0aW9uLCB3ZSBkZWNpZGVkIHRoYXQgdHJhbnNpdGlvbmluZyB0aGUgdG9wLWxldmVsIGNvbW1hbmQgd2FzIHRoZSBiZXN0IG9wdGlvbi4KCiAgICBIZXJlJ3MgYSBicmllZiBleGFtcGxlOgoKICAgIGBgYGNvbnNvbGUKICAgICQgdXYgaW5pdCBleGFtcGxlCiAgICBJbml0aWFsaXplZCBwcm9qZWN0IGBleGFtcGxlYCBhdCBgLi9leGFtcGxlYAogICAgJCBjZCBleGFtcGxlCiAgICAkIHV2IHZlcnNpb24KICAgIGV4YW1wbGUgMC4xLjAKICAgICQgdXYgdmVyc2lvbiAtLWJ1bXAgbWFqb3IKICAgIGV4YW1wbGUgMC4xLjAgPT4gMS4wLjAKICAgICQgdXYgdmVyc2lvbiAtLXNob3J0CiAgICAxLjAuMAogICAgYGBgCgogICAgSWYgdXNlZCBvdXRzaWRlIG9mIGEgcHJvamVjdCwgdXYgd2lsbCBmYWxsYmFjayB0byBzaG93aW5nIGl0cyBvd24gdmVyc2lvbiBzdGlsbDoKCiAgICBgYGBjb25zb2xlCiAgICAkIHV2IHZlcnNpb24KICAgIHdhcm5pbmc6IGZhaWxlZCB0byByZWFkIHByb2plY3Q6IE5vIGBweXByb2plY3QudG9tbGAgZm91bmQgaW4gY3VycmVudCBkaXJlY3Rvcnkgb3IgYW55IHBhcmVudCBkaXJlY3RvcnkKICAgICAgcnVubmluZyBgdXYgc2VsZiB2ZXJzaW9uYCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBgdXYgdmVyc2lvbmAgY29tbWFuZC4KICAgICAgdGhpcyBmYWxsYmFjayB3aWxsIGJlIHJlbW92ZWQgc29vbiwgcGFzcyBgLS1wcmV2aWV3YCB0byBtYWtlIHRoaXMgYW4gZXJyb3IuCgogICAgdXYgMC43LjAgKDQ0MzNmNDFjOSAyMDI1LTA0LTI5KQogICAgYGBgCgogICAgQXMgZGVzY3JpYmVkIGluIHRoZSB3YXJuaW5nLCBgLS1wcmV2aWV3YCBjYW4gYmUgdXNlZCB0byBlcnJvciBpbnN0ZWFkOgoKICAgIGBgYGNvbnNvbGUKICAgICQgdXYgdmVyc2lvbiAtLXByZXZpZXcKICAgIGVycm9yOiBObyBgcHlwcm9qZWN0LnRvbWxgIGZvdW5kIGluIGN1cnJlbnQgZGlyZWN0b3J5IG9yIGFueSBwYXJlbnQgZGlyZWN0b3J5CiAgICBgYGAKCiAgICBUaGUgcHJldmlvdXMgZnVuY3Rpb25hbGl0eSBvZiBgdXYgdmVyc2lvbmAgd2FzIG1vdmVkIHRvIGB1diBzZWxmIHZlcnNpb25gLgoKLSAgICoqQXZvaWQgZmFsbGJhY2sgdG8gc3Vic2VxdWVudCBpbmRleGVzIG9uIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgKFsjJiM4MjAzOzEyODA1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4MDUpKSoqCgogICAgV2hlbiB1c2luZyB0aGUgYGZpcnN0LWluZGV4YCBzdHJhdGVneSAodGhlIGRlZmF1bHQpLCB1diB3aWxsIHN0b3Agc2VhcmNoaW5nIGluZGV4ZXMgZm9yIGEgcGFja2FnZSBvbmNlIGl0IGlzIGZvdW5kIG9uIGEgc2luZ2xlIGluZGV4LiBQcmV2aW91c2x5LCB1diBjb25zaWRlcmVkIGEgcGFja2FnZSBhcyAibWlzc2luZyIgZnJvbSBhbiBpbmRleCBkdXJpbmcgYXV0aGVudGljYXRpb24gZmFpbHVyZXMsIHN1Y2ggYXMgYW4gSFRUUCA0MDEgb3IgSFRUUCA0MDMgKG5vcm1hbGx5LCBtaXNzaW5nIHBhY2thZ2VzIGFyZSByZXByZXNlbnRlZCBieSBhbiBIVFRQIDQwNCkuIFRoaXMgYmVoYXZpb3Igd2FzIG1vdGl2YXRlZCBieSB1bnVzdWFsIHJlc3BvbnNlcyBmcm9tIHNvbWUgcGFja2FnZSBpbmRleGVzLCBidXQgcmVkdWNlcyB0aGUgc2FmZXR5IG9mIHV2J3MgaW5kZXggc3RyYXRlZ3kgd2hlbiBhdXRoZW50aWNhdGlvbiBmYWlscy4gTm93LCB1diB3aWxsIGNvbnNpZGVyIGFuIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgYXMgYSBzdG9wLXBvaW50IHdoZW4gc2VhcmNoaW5nIGZvciBhIHBhY2thZ2UgYWNyb3NzIGluZGV4ZXMuIFRoZSBgaW5kZXguaWdub3JlLWVycm9yLWNvZGVzYCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVjb3ZlciB0aGUgZXhpc3RpbmcgYmVoYXZpb3IsIGUuZy46CgogICAgYGBgdG9tbAogICAgW1t0b29sLnV2LmluZGV4XV0KICAgIG5hbWUgPSAicHl0b3JjaCIKICAgIHVybCA9ICJodHRwczovL2Rvd25sb2FkLnB5dG9yY2gub3JnL3dobC9jcHUiCiAgICBpZ25vcmUtZXJyb3ItY29kZXMgPSBbNDAxLCA0MDNdCiAgICBgYGAKCiAgICBTaW5jZSBQeVRvcmNoJ3MgaW5kZXhlcyBhbHdheXMgcmV0dXJuIGEgSFRUUCA0MDMgZm9yIG1pc3NpbmcgcGFja2FnZXMsIHV2IHNwZWNpYWwtY2FzZXMgaW5kZXhlcyBvbiB0aGUgYHB5dG9yY2gub3JnYCBkb21haW4gdG8gaWdub3JlIHRoYXQgZXJyb3IgY29kZSBieSBkZWZhdWx0LgoKLSAgICoqUmVxdWlyZSB0aGUgY29tbWFuZCBpbiBgdXZ4IDxuYW1lPmAgdG8gYmUgYXZhaWxhYmxlIGluIHRoZSBQeXRob24gZW52aXJvbm1lbnQgKFsjJiM4MjAzOzExNjAzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTE2MDMpKSoqCgogICAgUHJldmlvdXNseSwgYHV2eGAgd291bGQgYXR0ZW1wdCB0byBleGVjdXRlIGEgY29tbWFuZCBldmVuIGlmIGl0IHdhcyBub3QgcHJvdmlkZWQgYnkgYSBQeXRob24gcGFja2FnZS4gRm9yIGV4YW1wbGUsIGlmIHdlIHByZXN1bWUgYGZvb2AgaXMgYW4gZW1wdHkgUHl0aG9uIHBhY2thZ2Ugd2hpY2ggcHJvdmlkZXMgbm8gY29tbWFuZCwgYHV2eCBmb29gIHdvdWxkIGludm9rZSB0aGUgYGZvb2AgY29tbWFuZCBvbiB0aGUgYFBBVEhgIChpZiBwcmVzZW50KS4gTm93LCB1diB3aWxsIGVycm9yIGVhcmx5IGlmIHRoZSBgZm9vYCBleGVjdXRhYmxlIGlzIG5vdCBwcm92aWRlZCBieSB0aGUgcmVxdWVzdGVkIFB5dGhvbiBwYWNrYWdlLiBUaGlzIGNoZWNrIGlzIG5vdCBlbmZvcmNlZCB3aGVuIGAtLWZyb21gIGlzIHVzZWQsIHNvIHBhdHRlcm5zIGxpa2UgYHV2eCAtLWZyb20gZm9vIGJhc2ggLWMgIi4uLiJgIGFyZSBzdGlsbCB2YWxpZC4gdXYgYWxzbyBzdGlsbCBhbGxvd3MgYHV2eCBmb29gIHdoZXJlIHRoZSBgZm9vYCBleGVjdXRhYmxlIGlzIHByb3ZpZGVkIGJ5IGEgZGVwZW5kZW5jeSBvZiBgZm9vYCBpbnN0ZWFkIG9mIGBmb29gIGl0c2VsZiwgYXMgdGhpcyBpcyBmYWlybHkgY29tbW9uIGZvciBwYWNrYWdlcyB3aGljaCBkZXBlbmQgb24gYSBkZWRpY2F0ZWQgcGFja2FnZSBmb3IgdGhlaXIgY29tbWFuZC1saW5lIGludGVyZmFjZS4KCi0gICAqKlVzZSBpbmRleCBVUkwgaW5zdGVhZCBvZiBwYWNrYWdlIFVSTCBmb3Iga2V5cmluZyBjcmVkZW50aWFsIGxvb2t1cHMgKFsjJiM4MjAzOzEyNjUxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2NTEpKSoqCgogICAgV2hlbiBkZXRlcm1pbmluZyBjcmVkZW50aWFscyBmb3IgcXVlcnlpbmcgYSBwYWNrYWdlIFVSTCwgdXYgcHJldmlvdXNseSBzZW50IHRoZSBmdWxsIFVSTCB0byB0aGUgYGtleXJpbmdgIGNvbW1hbmQuIEhvd2V2ZXIsIHNvbWUga2V5cmluZyBwbHVnaW5zIGV4cGVjdCB0byByZWNlaXZlIHRoZSAqaW5kZXggVVJMKiAod2hpY2ggaXMgdXN1YWxseSBhIHBhcmVudCBvZiB0aGUgcGFja2FnZSBVUkwpLiBOb3csIHV2IHJlcXVlc3RzIGNyZWRlbnRpYWxzIGZvciB0aGUgaW5kZXggVVJMIGluc3RlYWQuIFRoaXMgYmVoYXZpb3IgbWF0Y2hlcyBgcGlwYC4KCi0gICAqKlJlbW92ZSBgLS12ZXJzaW9uYCBmcm9tIHN1YmNvbW1hbmRzIChbIyYjODIwMzsxMzEwOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMTA4KSkqKgoKICAgIFByZXZpb3VzbHksIHV2IGFsbG93ZWQgdGhlIGAtLXZlcnNpb25gIGZsYWcgb24gYXJiaXRyYXJ5IHN1YmNvbW1hbmRzLCBlLmcuLCBgdXYgcnVuIC0tdmVyc2lvbmAuIEhvd2V2ZXIsIHRoZSBgLS12ZXJzaW9uYCBmbGFnIGlzIHVzZWZ1bCBmb3Igb3RoZXIgb3BlcmF0aW9ucyBzaW5jZSB1diBpcyBhIHBhY2thZ2UgbWFuYWdlci4gQ29uc2VxdWVudGx5LCB3ZSd2ZSByZW1vdmVkIHRoZSBgLS12ZXJzaW9uYCBmbGFnIGZyb20gc3ViY29tbWFuZHMg4oCUIGl0IGlzIG9ubHkgYXZhaWxhYmxlIGFzIGB1diAtLXZlcnNpb25gLgoKLSAgICoqT21pdCBQeXRob24gMy43IGRvd25sb2FkcyBmcm9tIG1hbmFnZWQgdmVyc2lvbnMgKFsjJiM4MjAzOzEzMDIyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMwMjIpKSoqCgogICAgUHl0aG9uIDMuNyBpcyBFT0wgYW5kIG5vdCBmb3JtYWxseSBzdXBwb3J0ZWQgYnkgdXY7IGhvd2V2ZXIsIFB5dGhvbiAzLjcgd2FzIHByZXZpb3VzbHkgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBvbiBhIHN1YnNldCBvZiBwbGF0Zm9ybXMuCgotICAgKipSZWplY3Qgbm9uLVBFUCA3NTEgVE9NTCBmaWxlcyBpbiBpbnN0YWxsLCBjb21waWxlLCBhbmQgZXhwb3J0IGNvbW1hbmRzIChbIyYjODIwMzsxMzEyMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMTIwKSwgWyMmIzgyMDM7MTMxMTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzExOSkpKioKCiAgICBQcmV2aW91c2x5LCB1diB0cmVhdGVkIGFyYml0cmFyeSBgLnRvbWxgIGZpbGVzIHBhc3NlZCB0byBjb21tYW5kcyAoZS5nLiwgYHV2IHBpcCBpbnN0YWxsIC1yIGZvby50b21sYCBvciBgdXYgcGlwIGNvbXBpbGUgLW8gZm9vLnRvbWxgKSBhcyBgcmVxdWlyZW1lbnRzLnR4dGAtZm9ybWF0dGVkIGZpbGVzLiBOb3csIHV2IHdpbGwgZXJyb3IgaW5zdGVhZC4gSWYgdXNpbmcgUEVQIDc1MSBsb2NrZmlsZXMsIHVzZSB0aGUgc3RhbmRhcmRpemVkIGZvcm1hdCBmb3IgY3VzdG9tIG5hbWVzIGluc3RlYWQsIGUuZy4sIGBweWxvY2suZm9vLnRvbWxgLgoKLSAgICoqSWdub3JlIGFyYml0cmFyeSBQeXRob24gcmVxdWVzdHMgaW4gdmVyc2lvbiBmaWxlcyAoWyMmIzgyMDM7MTI5MDldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjkwOSkpKioKCiAgICB1diBhbGxvd3MgYXJiaXRyYXJ5IHN0cmluZ3MgdG8gYmUgdXNlZCBmb3IgUHl0aG9uIHZlcnNpb24gcmVxdWVzdHMsIGluIHdoaWNoIHRoZXkgYXJlIHRyZWF0ZWQgYXMgYW4gZXhlY3V0YWJsZSBuYW1lIHRvIHNlYXJjaCBmb3IgaW4gdGhlIGBQQVRIYC4gSG93ZXZlciwgdXNpbmcgdGhpcyBmb3JtIG9mIHJlcXVlc3QgaW4gYC5weXRob24tdmVyc2lvbmAgZmlsZXMgaXMgbm9uLXN0YW5kYXJkIGFuZCBjb25mbGljdHMgd2l0aCBgcHllbnYtdmlydHVhbGVudmAgd2hpY2ggd3JpdGVzIGVudmlyb25tZW50IG5hbWVzIHRvIGAucHl0aG9uLXZlcnNpb25gIGZpbGVzLiBJbiB0aGlzIHJlbGVhc2UsIHV2IHdpbGwgbm93IGlnbm9yZSByZXF1ZXN0cyB0aGF0IGFyZSBhcmJpdHJhcnkgc3RyaW5ncyB3aGVuIGZvdW5kIGluIGAucHl0aG9uLXZlcnNpb25gIGZpbGVzLgoKLSAgICoqRXJyb3Igb24gdW5rbm93biBkZXBlbmRlbmN5IG9iamVjdCBzcGVjaWZpZXJzIChbMTI4MTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjgxMSkpKioKCiAgICBUaGUgYFtkZXBlbmRlbmN5LWdyb3Vwc11gIGVudHJpZXMgY2FuIGluY2x1ZGUgIm9iamVjdCBzcGVjaWZpZXJzIiwgZS5nLiBgc2V0LXBoYXNlcnMtdG8gPSAuLi5gIGluOgoKICAgIGBgYHRvbWwKICAgIFtkZXBlbmRlbmN5LWdyb3Vwc10KICAgIGZvbyA9IFsicHlwYXJzaW5nIl0KICAgIGJhciA9IFt7c2V0LXBoYXNlcnMtdG8gPSAic3R1biJ9XQogICAgYGBgCgogICAgSG93ZXZlciwgdGhlIG9ubHkgY3VycmVudCBzcGVjLWNvbXBsaWFudCBvYmplY3Qgc3BlY2lmaWVyIGlzIGBpbmNsdWRlLWdyb3VwYC4gUHJldmlvdXNseSwgdXYgd291bGQgaWdub3JlIHVua25vd24gb2JqZWN0IHNwZWNpZmllcnMuIE5vdywgdXYgd2lsbCBlcnJvci4KCi0gICAqKk1ha2UgYC0tZnJvemVuYCBhbmQgYC0tbm8tc291cmNlc2AgY29uZmxpY3Rpbmcgb3B0aW9ucyAoWyMmIzgyMDM7MTI2NzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjY3MSkpKioKCiAgICBVc2luZyBgLS1uby1zb3VyY2VzYCBhbHdheXMgcmVxdWlyZXMgYSBuZXcgcmVzb2x1dGlvbiBhbmQgYC0tZnJvemVuYCB3aWxsIGFsd2F5cyBmYWlsIHdoZW4gdXNlZCB3aXRoIGl0LiBOb3csIHRoaXMgY29uZmxpY3QgaXMgZW5jb2RlZCBpbiB0aGUgQ0xJIG9wdGlvbnMgZm9yIGNsYXJpdHkuCgotICAgKipUcmVhdCBlbXB0eSBgVVZfUFlUSE9OX0lOU1RBTExfRElSYCBhbmQgYFVWX1RPT0xfRElSYCBhcyB1bnNldCAoWyMmIzgyMDM7MTI5MDddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjkwNyksIFsjJiM4MjAzOzEyOTA1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5MDUpKSoqCgogICAgUHJldmlvdXNseSwgdGhlc2UgdmFyaWFibGVzIHdlcmUgdHJlYXRlZCBhcyBzZXQgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLiBOb3csIHV2IHdpbGwgaWdub3JlIHRoZXNlIHZhcmlhYmxlcyB3aGVuIGVtcHR5LiBUaGlzIG1hdGNoZXMgdXYncyBiZWhhdmlvciBmb3Igb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoaWNoIGNvbmZpZ3VyZSBkaXJlY3Rvcmllcy4KCiMjIyMjIEVuaGFuY2VtZW50cwoKLSAgIERpc2FsbG93IG1peGluZyByZXF1aXJlbWVudHMgYWNyb3NzIFB5VG9yY2ggaW5kZXhlcyAoWyMmIzgyMDM7MTMxNzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzE3OSkpCi0gICBBZGQgb3B0aW9uYWwgbWFuYWdlZCBQeXRob24gYXJjaGl2ZSBkb3dubG9hZCBjYWNoZSAoWyMmIzgyMDM7MTIxNzVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjE3NSkpCi0gICBBZGQgYHBvZXRyeS1jb3JlYCBhcyBhIGB1diBpbml0YCBidWlsZCBiYWNrZW5kIG9wdGlvbiAoWyMmIzgyMDM7MTI3ODFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjc4MSkpCi0gICBTaG93IHRhZyBoaW50cyB3aGVuIGZhaWxpbmcgdG8gZmluZCBhIGNvbXBhdGlibGUgd2hlZWwgaW4gYHB5bG9jay50b21sYCAoWyMmIzgyMDM7MTMxMzZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzEzNikpCi0gICBSZXBvcnQgUHl0aG9uIHZlcnNpb25zIGluIGBweXZlbnYuY2ZnYCB2ZXJzaW9uIG1pc21hdGNoIChbIyYjODIwMzsxMzAyN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMDI3KSkKCiMjIyMjIEJ1ZyBmaXhlcwoKLSAgIEF2b2lkIGVycm9yaW5nIG9uIG9taXR0ZWQgd2hlZWwtb25seSBwYWNrYWdlcyBpbiBgcHlsb2NrLnRvbWxgIChbIyYjODIwMzsxMzEzMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMTMyKSkKLSAgIEZpeCBkaXNwbGF5IG5hbWUgZm9yIGB1dnggLS12ZXJzaW9uYCAoWyMmIzgyMDM7MTMxMDldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzEwOSkpCi0gICBSZXN0b3JlIGhhbmRsaW5nIG9mIGF1dGhlbnRpY2F0aW9uIHdoZW4gZW5jb3VudGVyaW5nIHJlZGlyZWN0cyAoWyMmIzgyMDM7MTMwNTBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzA1MCkpCi0gICBSZXNwZWN0IGJ1aWxkIG9wdGlvbnMgKGAtLW5vLWJpbmFyeWAgZXQgYWwpIGluIGBweWxvY2sudG9tbGAgKFsjJiM4MjAzOzEzMTM0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMxMzQpKQotICAgVXNlIGB1cGxvYWQtdGltZWAgcmF0aGVyIHRoYW4gYHVwbG9hZF90aW1lYCBpbiBgdXYubG9ja2AgKFsjJiM4MjAzOzEzMTc2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMxNzYpKQoKIyMjIyMgRG9jdW1lbnRhdGlvbgoKLSAgIENoYW5nZWQgYGZpc2hgIGNvbXBsZXRpb25zIGFwcGVuZCBgPj5gIHRvIG92ZXJ3cml0ZSBgPmAgKFsjJiM4MjAzOzEzMTMwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMxMzApKQotICAgQWRkIGBweWxvY2sudG9tbGAgbWVudGlvbnMgd2hlcmUgcmVsZXZhbnQgKFsjJiM4MjAzOzEzMTE1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMxMTUpKQotICAgQWRkIFJPQ20gZXhhbXBsZSB0byB0aGUgUHlUb3JjaCBndWlkZSAoWyMmIzgyMDM7MTMyMDBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbDEzMjAwKSkKLSAgIFVwZ3JhZGUgUHlUb3JjaCBndWlkZSB0byBDVURBIDEyLjggYW5kIFB5VG9yY2ggMi43IChbIyYjODIwMzsxMzE5OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsMTMxOTkpKQoKIyMjIFtgdjAuNi4xN2BdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvYmxvYi9IRUFEL0NIQU5HRUxPRy5tZCMwNjE3KQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L2NvbXBhcmUvMC42LjE2Li4uMC42LjE3KQoKIyMjIyMgUHJldmlldyBmZWF0dXJlcwoKLSAgIEFkZCBQeVRvcmNoIHYyLjcuMCB0byBHUFUgYmFja2VuZCAoWyMmIzgyMDM7MTMwNzJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzA3MikpCgojIyMjIyBCdWcgZml4ZXMKCi0gICBBdm9pZCBwYW5pYyBmb3IgaW52YWxpZCBQeXRob24gdmVyc2lvbnMgKFsjJiM4MjAzOzEzMDc3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMwNzcpKQotICAgQmxvY2sgc2NyaXB0cyBmcm9tIG92ZXJ3cml0aW5nIGBweXRob25gIChbIyYjODIwMzsxMzA1MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMDUxKSkKLSAgIENoZWNrIGRpc3RyaWJ1dGlvbiBuYW1lcyB0byBoYW5kbGUgaW52YWxpZCByZWRpcmVjdHMgKFsjJiM4MjAzOzEyOTE3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5MTcpKQotICAgQ2hlY2sgZm9yIG1pc21hdGNoZWQgcGFja2FnZSBhbmQgZGlzdHJpYnV0aW9uIG5hbWVzIG9uIHJlc29sdmVyIHRocmVhZCAoWyMmIzgyMDM7MTMwODhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzA4OCkpCi0gICBGaXggcGFuaWMgd2l0aCBpbnZhbGlkIGxhc3QgY2hhcmFjdGVyIGluIFBFUCA1MDggbmFtZSAoWyMmIzgyMDM7MTMxMDVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzEwNSkpCi0gICBSZWplY3QgYHJlcXVpcmVzLXB5dGhvbmAgZXZlbiBpZiBub3QgbGlzdGVkIG9uIHRoZSBpbmRleCBwYWdlIChbIyYjODIwMzsxMzA4Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMDg2KSkKCiMjIyBbYHYwLjYuMTZgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL3RhZy8wLjYuMTYpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvY29tcGFyZS8wLjYuMTUuLi4wLjYuMTYpCgojIyMjIFJlbGVhc2UgTm90ZXMKCiMjIyMjIEJ1ZyBmaXhlcwoKLSAgIFJldmVydCAiUHJvcGVybHkgaGFuZGxlIGF1dGhlbnRpY2F0aW9uIGZvciAzMDIgcmVkaXJlY3QgVVJMcyIgKFsjJiM4MjAzOzEzMDQxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMwNDEpKQoKIyMjIyBJbnN0YWxsIHV2IDAuNi4xNgoKIyMjIyMgSW5zdGFsbCBwcmVidWlsdCBiaW5hcmllcyB2aWEgc2hlbGwgc2NyaXB0CgpgYGBzaApjdXJsIC0tcHJvdG8gJz1odHRwcycgLS10bHN2MS4yIC1Mc1NmIGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWluc3RhbGxlci5zaCB8IHNoCmBgYAoKIyMjIyMgSW5zdGFsbCBwcmVidWlsdCBiaW5hcmllcyB2aWEgcG93ZXJzaGVsbCBzY3JpcHQKCmBgYHNoCnBvd2Vyc2hlbGwgLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLWMgImlybSBodHRwczovL2dpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1pbnN0YWxsZXIucHMxIHwgaWV4IgpgYGAKCiMjIyMgRG93bmxvYWQgdXYgMC42LjE2Cgp8ICBGaWxlICB8IFBsYXRmb3JtIHwgQ2hlY2tzdW0gfAp8LS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tfAp8IFt1di1hYXJjaDY0LWFwcGxlLWRhcndpbi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFhcmNoNjQtYXBwbGUtZGFyd2luLnRhci5neikgfCBBcHBsZSBTaWxpY29uIG1hY09TIHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1hYXJjaDY0LWFwcGxlLWRhcndpbi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXg4NlxfNjQtYXBwbGUtZGFyd2luLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYteDg2XF82NC1hcHBsZS1kYXJ3aW4udGFyLmd6KSB8IEludGVsIG1hY09TIHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di14ODZcXzY0LWFwcGxlLWRhcndpbi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFhcmNoNjQtcGMtd2luZG93cy1tc3ZjLnppcF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtYWFyY2g2NC1wYy13aW5kb3dzLW1zdmMuemlwKSB8IEFSTTY0IFdpbmRvd3MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFhcmNoNjQtcGMtd2luZG93cy1tc3ZjLnppcC5zaGEyNTYpIHwKfCBbdXYtaTY4Ni1wYy13aW5kb3dzLW1zdmMuemlwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1pNjg2LXBjLXdpbmRvd3MtbXN2Yy56aXApIHwgeDg2IFdpbmRvd3MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWk2ODYtcGMtd2luZG93cy1tc3ZjLnppcC5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC1wYy13aW5kb3dzLW1zdmMuemlwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di14ODZcXzY0LXBjLXdpbmRvd3MtbXN2Yy56aXApIHwgeDY0IFdpbmRvd3MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXg4NlxfNjQtcGMtd2luZG93cy1tc3ZjLnppcC5zaGEyNTYpIHwKfCBbdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IEFSTTY0IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1hYXJjaDY0LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtaTY4Ni11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWk2ODYtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IHg4NiBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtaTY4Ni11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgUFBDNjQgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXBvd2VycGM2NGxlLXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IFBQQzY0TEUgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXBvd2VycGM2NGxlLXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtczM5MHgtdW5rbm93bi1saW51eC1nbnUudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1zMzkweC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgUzM5MHggTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXMzOTB4LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IHg2NCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYteDg2XF82NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtYXJtdjctdW5rbm93bi1saW51eC1nbnVlYWJpaGYudGFyLmd6KSB8IEFSTXY3IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1hcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6KSB8IEFSTTY0IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtaTY4Ni11bmtub3duLWxpbnV4LW11c2wudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1pNjg2LXVua25vd24tbGludXgtbXVzbC50YXIuZ3opIHwgeDg2IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWk2ODYtdW5rbm93bi1saW51eC1tdXNsLnRhci5nei5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di14ODZcXzY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3opIHwgeDY0IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYXJtLXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFybS11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6KSB8IEFSTXY2IE1VU0wgTGludXggKEhhcmRmbG9hdCkgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFybS11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6LnNoYTI1NikgfAp8IFt1di1hcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1hcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6KSB8IEFSTXY3IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3ouc2hhMjU2KSB8CgojIyMgW2B2MC42LjE1YF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9ibG9iL0hFQUQvQ0hBTkdFTE9HLm1kIzA2MTUpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvY29tcGFyZS8wLjYuMTQuLi4wLjYuMTUpCgpUaGlzIHJlbGVhc2UgaW5jbHVkZXMgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgdGhlIGBweWxvY2sudG9tbGAgZmlsZSBmb3JtYXQsIGFzIHN0YW5kYXJkaXplZCBpbiBbUEVQIDc1MV0oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA3NTEvKS4gYHB5bG9jay50b21sYCBpcyBhbiBhbHRlcm5hdGl2ZSByZXNvbHV0aW9uIG91dHB1dCBmb3JtYXQgaW50ZW5kZWQgdG8gcmVwbGFjZSBgcmVxdWlyZW1lbnRzLnR4dGAgKGUuZy4sIGluIHRoZSBjb250ZXh0IG9mIGB1diBwaXAgY29tcGlsZWAsIHdoZXJlYnkgYSAibG9ja2VkIiBgcmVxdWlyZW1lbnRzLnR4dGAgZmlsZSBpcyBnZW5lcmF0ZWQgZnJvbSBhIHNldCBvZiBpbnB1dCByZXF1aXJlbWVudHMpLiBgcHlsb2NrLnRvbWxgIGlzIHN0YW5kYXJkaXplZCBhbmQgdG9vbC1hZ25vc3RpYywgc3VjaCB0aGF0IGluIHRoZSBmdXR1cmUsIGBweWxvY2sudG9tbGAgZmlsZXMgZ2VuZXJhdGVkIGJ5IHV2IGNvdWxkIGJlIGluc3RhbGxlZCBieSBvdGhlciB0b29scywgYW5kIHZpY2UgdmVyc2EuCgpBcyBvZiB0aGlzIHJlbGVhc2UsIGBweWxvY2sudG9tbGAgaXMgc3VwcG9ydGVkIGluIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CgotICAgVG8gZXhwb3J0IGEgYHV2LmxvY2tgIHRvIHRoZSBgcHlsb2NrLnRvbWxgIGZvcm1hdCwgcnVuOiBgdXYgZXhwb3J0IC1vIHB5bG9jay50b21sYAotICAgVG8gZ2VuZXJhdGUgYSBgcHlsb2NrLnRvbWxgIGZpbGUgZnJvbSBhIHNldCBvZiByZXF1aXJlbWVudHMsIHJ1bjogYHV2IHBpcCBjb21waWxlIC1vIHB5bG9jay50b21sIHJlcXVpcmVtZW50cy5pbmAKLSAgIFRvIGluc3RhbGwgZnJvbSBhIGBweWxvY2sudG9tbGAgZmlsZSwgcnVuOiBgdXYgcGlwIHN5bmMgcHlsb2NrLnRvbWxgIG9yIGB1diBwaXAgaW5zdGFsbCAtciBweWxvY2sudG9tbGAKCiMjIyMjIEVuaGFuY2VtZW50cwoKLSAgIEFkZCBQRVAgNzUxIHN1cHBvcnQgdG8gYHV2IHBpcCBjb21waWxlYCAoWyMmIzgyMDM7MTMwMTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzAxOSkpCi0gICBBZGQgYHV2IGV4cG9ydGAgc3VwcG9ydCBmb3IgUEVQIDc1MSAoWyMmIzgyMDM7MTI5NTVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjk1NSkpCi0gICBBY2NlcHQgYHJlcXVpcmVtZW50cy50eHRgICh2ZXJiYXRpbSkgYXMgYSBmb3JtYXQgb24gdGhlIENMSSAoWyMmIzgyMDM7MTI5NTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjk1NykpCi0gICBBZGQgYFVWX05PX0VESVRBQkxFYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgYC0tbm8tZWRpdGFibGVgIG9uIGFsbCBpbnZvY2F0aW9ucyAoWyMmIzgyMDM7MTI3NzNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjc3MykpCi0gICBBZGQgYHB5bG9jay50b21sYCB0byBgdXYgcGlwIGluc3RhbGxgIGFuZCBgdXYgcGlwIHN5bmNgIChbIyYjODIwMzsxMjk5Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTkyKSkKLSAgIEFkZCBhIGJyaWVmIHNsZWVwIGJlZm9yZSBzZW5kaW5nIGBTSUdJTlRgIHRvIGNoaWxkIHByb2Nlc3NlcyAoWyMmIzgyMDM7MTMwMThdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzAxOCkpCi0gICBBZGQgdXBsb2FkIHRpbWUgdG8gYHV2LmxvY2tgIChbIyYjODIwMzsxMjk2OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTY4KSkKLSAgIEFsbG93IHVwZGF0aW5nIEdpdCBzb3VyY2VzIGJ5IG5hbWUgKFsjJiM4MjAzOzEyODk3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4OTcpKQotICAgQ2FjaGUgYHdoaWNoIGdpdGAgaW4gYHV2IGluaXRgIChbIyYjODIwMzsxMjg5M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODkzKSkKLSAgIEVuYWJsZSBgLS1kcnktcnVuYCB3aXRoIGAtLWxvY2tlZGAgLyBgLS1mcm96ZW5gIGZvciBgdXYgc3luY2AgKFsjJiM4MjAzOzEyNzc4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI3NzgpKQotICAgSW5mZXIgb3V0cHV0IHR5cGUgaW4gYHV2IGV4cG9ydGAgKFsjJiM4MjAzOzEyOTU4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5NTgpKQotICAgTWFrZSBgdXYgaW5pdGAgcmVzaWxpZW50IGFnYWluc3QgYnJva2VuIGdpdCAoWyMmIzgyMDM7MTI4OTVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjg5NSkpCi0gICBSZXNwZWN0IGJ1aWxkIGNvbnN0cmFpbnRzIGZvciBgdXYgcnVuIC0td2l0aGAgZGVwZW5kZW5jaWVzIChbIyYjODIwMzsxMjg4Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODgyKSkKLSAgIFNwbGl0IFVWX0lOREVYIG9uIGFsbCB3aGl0ZXNwYWNlIChbIyYjODIwMzsxMjgyMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODIwKSkKLSAgIFN1cHBvcnQgYnVpbGQgY29uc3RyYWludHMgaW4gYHV2IHRvb2xgIGFuZCBQRVA3MjMgc2NyaXB0cy4gKFsjJiM4MjAzOzEyODQyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4NDIpKQotICAgVXNlIHN1ZmZpeCBmcm9tIGB1dnhgIGJpbmFyeSB3aGVuIHNlYXJjaGluZyBmb3IgdXYgYmluYXJ5IChbIyYjODIwMzsxMjkyM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTIzKSkKLSAgIFVwZGF0ZSB2ZXJzaW9uIGZvcm1hdHRpbmcgdG8gdXNlIGN5YW4gY29sb3IgKFsjJiM4MjAzOzEyOTQzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5NDMpKQotICAgQWRkIGRlYnVnIGxvZ3MgZm9yIHZlcnNpb24gZmlsZSBzZWFyY2ggKFsjJiM4MjAzOzEyOTUxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5NTEpKQotICAgRml4IGBTb3VyY2VOb3RBbGxvd2VkYCBlcnJvciBtZXNzYWdlIGR1cmluZyBQeXRob24gZGlzY292ZXJ5IChbIyYjODIwMzsxMzAxMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMDEyKSkKLSAgIE9iZnVzY2F0ZSBwYXNzd29yZCBpbiBjcmVkZW50aWFscyBkZWJ1ZyBtZXNzYWdlcyAoWyMmIzgyMDM7MTI5NDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjk0NCkpCi0gICBPYmZ1c2NhdGUgcG9zc2libGUgdG9rZW5zIGluIFVSTCBsb2dzIChbIyYjODIwMzsxMjk2OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTY5KSkKLSAgIFZhbGlkYXRlIHRoYXQgUEVQIDc1MSBlbnRyaWVzIGRvbid0IGluY2x1ZGUgbXVsdGlwbGUgc291cmNlcyAoWyMmIzgyMDM7MTI5OTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjk5MykpCgojIyMjIyBQcmV2aWV3IGZlYXR1cmVzCgotICAgQnVpbGQgYmFja2VuZDogQWRkIHJlZmVyZW5jZSBkb2NzIGFuZCBzY2hlbWEgKFsjJiM4MjAzOzEyODAzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4MDMpKQoKIyMjIyMgQnVnIGZpeGVzCgotICAgQWxpZ24gc3VwcG9ydGVkIGBjb25maWctc2V0dGluZ3NgIHdpdGggZXhhbXBsZSBpbiBkb2NzIChbIyYjODIwMzsxMjk0N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTQ3KSkKLSAgIEVuc3VyZSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGNvbXBhdGlibGUgd2l0aCBpbnRlcnByZXRlciBvbiBzeW5jIChbIyYjODIwMzsxMjg4NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODg0KSkKLSAgIEZpeCBgUHl0aG9uRG93bmxvYWRSZXF1ZXN0YCBwYXJzaW5nIGZvciBwYXJ0aWFsIGtleXMgKFsjJiM4MjAzOzEyOTI1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5MjUpKQotICAgRml4IHByZS1yZWxlYXNlIGV4Y2x1c2l2ZSBjb21wYXJpc29uIG9wZXJhdG9yIGluIGB1di1wZXA0NDBgIChbIyYjODIwMzsxMjgzNl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODM2KSkKLSAgIEZvcndhcmQgYWRkaXRpb25hbCBzaWduYWxzIHRvIHRoZSBjaGlsZCBwcm9jZXNzIGluIGB1diBydW5gIChbIyYjODIwMzsxMzAxN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMDE3KSkKLSAgIE9taXQgUEVQIDc1MSB2ZXJzaW9uIGZvciBzb3VyY2UgdHJlZXMgKFsjJiM4MjAzOzEzMDMwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMwMzApKQotICAgUGF0Y2ggYENDYCBhbmQgYENDWGAgZW50cmllcyBpbiBzeXNjb25maWcgZm9yIGNyb3NzLWNvbXBpbGVkIGBhYXJjaDY0YCBQeXRob24gZGlzdHJpYnV0aW9ucyAoWyMmIzgyMDM7MTIyMzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjIzOSkpCi0gICBQcm9wZXJseSBoYW5kbGUgYXV0aGVudGljYXRpb24gZm9yIEhUVFAgMzAyIHJlZGlyZWN0IFVSTHMgKFsjJiM4MjAzOzEyOTIwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5MjApKQotICAgU2V0IDRNQiBzdGFjayBzaXplIGZvciBhbGwgdGhyZWFkcywgaW50cm9kdWNlIGBVVl9TVEFDS19TSVpFYCAoWyMmIzgyMDM7MTI4MzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjgzOSkpCi0gICBTaG93IFB5UHkgZG93bmxvYWRzIGR1cmluZyBgdXYgcHl0aG9uIGxpc3RgIChbIyYjODIwMzsxMjkxNV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTE1KSkKLSAgIEFkZCBgc3ViZGlyZWN0b3J5YCB0byBEaXJlY3QgVVJMIGZvciBsb2NhbCBkaXJlY3RvcmllcyAoWyMmIzgyMDM7MTI5NzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjk3MSkpCi0gICBQcmVmZXIgc3RhYmxlIHJlbGVhc2VzIG92ZXIgcHJlLXJlbGVhc2VzIGluIGB1diBweXRob24gaW5zdGFsbGAgKFsjJiM4MjAzOzEyMTk0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTIxOTQpKQotICAgV3JpdGUgcmVxdWVzdGVkIFB5dGhvbiB2YXJpYW50IHRvIHBpbiBmaWxlIGluIGB1diBpbml0YCAoWyMmIzgyMDM7MTI4NzBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjg3MCkpCgojIyMjIyBEb2N1bWVudGF0aW9uCgotICAgRml4IENMSSByZWZlcmVuY2Ugd2l0aCBjb2RlIGJsb2NrIChbIyYjODIwMzsxMjgwN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODA3KSkKLSAgIEZpeCBsb2NrZmlsZSBub3RlIChbIyYjODIwMzsxMjc5M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNzkzKSkKLSAgIEZpeCB0eXBvIGluIGEgcmVmZXJlbmNlIChbIyYjODIwMzsxMjg1OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODU4KSkKLSAgIEltcHJvdmUgZG9jcyBmb3IgYHV2IHB5dGhvbiBsaXN0IC0tb25seS1kb3dubG9hZHNgIGFuZCBgLS1vbmx5LWluc3RhbGxlZGAgKFsjJiM4MjAzOzEyOTE2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5MTYpKQotICAgVXBkYXRlIG5vdGUgb24gbGFjayBvZiBtdXNsIGRpc3RyaWJ1dGlvbnMgdG8gQVJNLW9ubHkgKFsjJiM4MjAzOzEyODI1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4MjUpKQotICAgQWRkIHNlY3Rpb24gb24gc2hlYmFuZ3MgZm9yIHNjcmlwdHMgKFsjJiM4MjAzOzExNTUzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTE1NTMpKQotICAgRGlzcGxheSBhbGlhc2VzIGZvciBsb25nIGFuZCBzaG9ydCBhcmdzIGluIHRoZSBDTEkgcmVmZXJlbmNlIChbIyYjODIwMzsxMjgyNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODI0KSkKLSAgIEZpeCBoaWdobGlnaHQgbGluZSBpbiBleHBsaWNpdCBpbmRleCBkb2N1bWVudGF0aW9uIChbIyYjODIwMzsxMjg4N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODg3KSkKLSAgIEFkZCBleHBsaWNpdCBzb3VyY2UgKG1hdGNoaW5nIFB5VG9yY2ggZ3VpZGUpIChbIyYjODIwMzsxMjg0NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODQ0KSkKLSAgIEZpeCBsaW5rIHRvIGlzc3VlIChbIyYjODIwMzsxMjgyM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODIzKSkKLSAgIEZpeCBncmFtbWF0aWNhbCBlcnJvciBpbiBGYXN0QVBJIGd1aWRlIChbIyYjODIwMzsxMjkwOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTA4KSkKLSAgIEFkZCBgLS1sb2NrZWRgIHRvIGB1diBzeW5jYCBpbiBHaXRIdWIgQWN0aW9ucyBndWlkZSAoWyMmIzgyMDM7MTI4MTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjgxOSkpCi0gICBJbXByb3ZlIGZvcm1hdHRpbmcgZm9yIGAiYWxsImAgYGRlZmF1bHQtZ3JvdXBzYCBzZXR0aW5nIGRvY3VtZW50YXRpb24gKFsjJiM4MjAzOzEyOTYzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5NjMpKQotICAgUmVwbGFjZSBgLS1mcm96ZW5gIHdpdGggYC0tbG9ja2VkYCBpbiBEb2NrZXIgaW50ZWdyYXRpb24gZ3VpZGUgKFsjJiM4MjAzOzEyODE4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4MTgpKQoKIyMjIFtgdjAuNi4xNGBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvdGFnLzAuNi4xNCkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9jb21wYXJlLzAuNi4xMy4uLjAuNi4xNCkKCiMjIyMgUmVsZWFzZSBOb3RlcwoKIyMjIyMgUHl0aG9uIHZlcnNpb25zCgpUaGUgZm9sbG93aW5nIFB5dGhvbiB2ZXJzaW9ucyBoYXZlIGJlZW4gYWRkZWQ6CgotICAgQ1B5dGhvbiAzLjEzLjMKLSAgIENQeXRob24gMy4xMi4xMAotICAgQ1B5dGhvbiAzLjExLjEyCi0gICBDUHl0aG9uIDMuMTAuMTcKLSAgIENQeXRob24gMy45LjIyCgpTZWUgdGhlIFtgcHl0aG9uLWJ1aWxkLXN0YW5kYWxvbmVgIHJlbGVhc2Ugbm90ZXNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvcHl0aG9uLWJ1aWxkLXN0YW5kYWxvbmUvcmVsZWFzZXMvdGFnLzIwMjUwNDA5KSBmb3IgbW9yZSBkZXRhaWxzLgoKIyMjIyMgRW5oYW5jZW1lbnRzCgotICAgQWRkIGB1di1idWlsZGAgYW5kIGB1dl9idWlsZGAgYWxpYXNlcyB0byBgdXYgaW5pdCAtLWJ1aWxkLWJhY2tlbmRgIChbIyYjODIwMzsxMjc3Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNzc2KSkKLSAgIEVtaXQgZGVkaWNhdGVkIGVycm9yIG1lc3NhZ2UgZm9yIENvbmRhIGBlbnZpcm9ubWVudC55bWxgIGZpbGVzIChbIyYjODIwMzsxMjY2OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNjY5KSkKCiMjIyMjIFByZXZpZXcgZmVhdHVyZXMKCi0gICBCdWlsZCBiYWNrZW5kOiBDaGVjayBtb2R1bGUgZGlyIGV4aXN0cyBmb3Igc2Rpc3QgYnVpbGQgKFsjJiM4MjAzOzEyNzc5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI3NzkpKQotICAgQnVpbGQgYmFja2VuZDogRml4IHNkaXN0IHdpdGggbG9uZyBkaXJlY3RvcmllcyAoWyMmIzgyMDM7MTI3NjRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjc2NCkpCgojIyMjIyBQZXJmb3JtYW5jZQoKLSAgIEF2b2lkIHF1ZXJ5aW5nIEdpdEh1YiBvbiByZXBlYXRlZCBpbnN0YWxsIGludm9jYXRpb25zIChbIyYjODIwMzsxMjc2N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNzY3KSkKCiMjIyMjIEJ1ZyBmaXhlcwoKLSAgIEVycm9yIHdoZW4gYHRvb2wudXYuc291cmNlc2AgaXMgc2V0IGluIHN5c3RlbS1sZXZlbCBjb25maWd1cmF0aW9uIGZpbGUgKFsjJiM4MjAzOzEyNzU3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI3NTcpKQotICAgU3BsaXQgd29ya3NwYWNlIG1lbWJlcnMgb250byB0aGVpciBvd24gbGluZXMgaW4gYHV2IGluaXRgIChbIyYjODIwMzsxMjc1Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNzU2KSkKCiMjIyMjIERvY3VtZW50YXRpb24KCi0gICBBZGQgbG9ja2ZpbGUgbm90ZSBhYm91dCBQRVAgNzUxIChbIyYjODIwMzsxMjczMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNzMyKSkKLSAgIEV4dGVuZCB0aGUgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24gZm9yIGB1diBwaXAgc3luY2AgKFsjJiM4MjAzOzEyNjgzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2ODMpKQotICAgRml4IG1pc21hdGNoZWQgcGlwIGludGVyZmFjZSBoZWFkZXIgLyBuYXYgdGl0bGVzIChbIyYjODIwMzsxMjY0MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNjQwKSkKCiMjIyB1diAwLjYuMTQKCiMjIyMgSW5zdGFsbCB1diAwLjYuMTQKCiMjIyMjIEluc3RhbGwgcHJlYnVpbHQgYmluYXJpZXMgdmlhIHNoZWxsIHNjcmlwdAoKYGBgc2gKY3VybCAtLXByb3RvICc9aHR0cHMnIC0tdGxzdjEuMiAtTHNTZiBodHRwczovL2dpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1pbnN0YWxsZXIuc2ggfCBzaApgYGAKCiMjIyMjIEluc3RhbGwgcHJlYnVpbHQgYmluYXJpZXMgdmlhIHBvd2Vyc2hlbGwgc2NyaXB0CgpgYGBzaApwb3dlcnNoZWxsIC1FeGVjdXRpb25Qb2xpY3kgQnlwYXNzIC1jICJpcm0gaHR0cHM6Ly9naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtaW5zdGFsbGVyLnBzMSB8IGlleCIKYGBgCgojIyMjIERvd25sb2FkIHV2IDAuNi4xNAoKfCAgRmlsZSAgfCBQbGF0Zm9ybSB8IENoZWNrc3VtIHwKfC0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwKfCBbdXYtYWFyY2g2NC1hcHBsZS1kYXJ3aW4udGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hYXJjaDY0LWFwcGxlLWRhcndpbi50YXIuZ3opIHwgQXBwbGUgU2lsaWNvbiBtYWNPUyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtYWFyY2g2NC1hcHBsZS1kYXJ3aW4udGFyLmd6LnNoYTI1NikgfAp8IFt1di14ODZcXzY0LWFwcGxlLWRhcndpbi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LXg4NlxfNjQtYXBwbGUtZGFyd2luLnRhci5neikgfCBJbnRlbCBtYWNPUyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYteDg2XF82NC1hcHBsZS1kYXJ3aW4udGFyLmd6LnNoYTI1NikgfAp8IFt1di1hYXJjaDY0LXBjLXdpbmRvd3MtbXN2Yy56aXBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWFhcmNoNjQtcGMtd2luZG93cy1tc3ZjLnppcCkgfCBBUk02NCBXaW5kb3dzIHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hYXJjaDY0LXBjLXdpbmRvd3MtbXN2Yy56aXAuc2hhMjU2KSB8CnwgW3V2LWk2ODYtcGMtd2luZG93cy1tc3ZjLnppcF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtaTY4Ni1wYy13aW5kb3dzLW1zdmMuemlwKSB8IHg4NiBXaW5kb3dzIHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1pNjg2LXBjLXdpbmRvd3MtbXN2Yy56aXAuc2hhMjU2KSB8CnwgW3V2LXg4NlxfNjQtcGMtd2luZG93cy1tc3ZjLnppcF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYteDg2XF82NC1wYy13aW5kb3dzLW1zdmMuemlwKSB8IHg2NCBXaW5kb3dzIHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di14ODZcXzY0LXBjLXdpbmRvd3MtbXN2Yy56aXAuc2hhMjU2KSB8CnwgW3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hYXJjaDY0LXVua25vd24tbGludXgtZ251LnRhci5neikgfCBBUk02NCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWk2ODYtdW5rbm93bi1saW51eC1nbnUudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1pNjg2LXVua25vd24tbGludXgtZ251LnRhci5neikgfCB4ODYgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWk2ODYtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di1wb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1wb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IFBQQzY0IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1wb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di1wb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LXBvd2VycGM2NGxlLXVua25vd24tbGludXgtZ251LnRhci5neikgfCBQUEM2NExFIExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1wb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXMzOTB4LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtczM5MHgtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IFMzOTB4IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1zMzkweC11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di14ODZcXzY0LXVua25vd24tbGludXgtZ251LnRhci5neikgfCB4NjQgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di1hcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmLnRhci5neikgfCBBUk12NyBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtYXJtdjctdW5rbm93bi1saW51eC1nbnVlYWJpaGYudGFyLmd6LnNoYTI1NikgfAp8IFt1di1hYXJjaDY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5neikgfCBBUk02NCBNVVNMIExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hYXJjaDY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWk2ODYtdW5rbm93bi1saW51eC1tdXNsLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtaTY4Ni11bmtub3duLWxpbnV4LW11c2wudGFyLmd6KSB8IHg4NiBNVVNMIExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1pNjg2LXVua25vd24tbGludXgtbXVzbC50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYteDg2XF82NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6KSB8IHg2NCBNVVNMIExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di14ODZcXzY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFybS11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hcm0tdW5rbm93bi1saW51eC1tdXNsZWFiaWhmLnRhci5neikgfCBBUk12NiBNVVNMIExpbnV4IChIYXJkZmxvYXQpIHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hcm0tdW5rbm93bi1saW51eC1tdXNsZWFiaWhmLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmLnRhci5neikgfCBBUk12NyBNVVNMIExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6LnNoYTI1NikgfAoKIyMjIFtgdjAuNi4xM2BdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvdGFnLzAuNi4xMykKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9jb21wYXJlLzAuNi4xMi4uLjAuNi4xMykKCiMjIyMgUmVsZWFzZSBOb3RlcwoKIyMjIyMgRW5oYW5jZW1lbnRzCgotICAgQWRkIGAtLXNob3ctdmVyc2lvbmAgdG8gYHV2IHB5dGhvbiBmaW5kYCAoWyMmIzgyMDM7MTIzNzZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjM3NikpCi0gICBSZW1vdmUgYC0tbm8tY29uZmlnYCB3YXJuaW5nIGZyb20gYHV2IHBpcCBjb21waWxlYCBhbmQgYHV2IHBpcCBzeW5jYCAoWyMmIzgyMDM7MTI2NDJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjY0MikpCi0gICBTa2lwIHJlcGVhdGVkIGRpcmVjdG9yaWVzIGluIGBQQVRIYCB3aGVuIHNlYXJjaGluZyBmb3IgUHl0aG9uIGludGVycHJldGVycyAoWyMmIzgyMDM7MTIzNjddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjM2NykpCi0gICBVbnNldCBgU0NSSVBUX1BBVEhgIGluIHJlbG9jYXRhYmxlIGFjdGl2YXRpb24gc2NyaXB0IChbIyYjODIwMzsxMjY3Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNjcyKSkKLSAgIEFkZCBgVVZfUFlUSE9OX0RPV05MT0FEU19KU09OX1VSTGAgdG8gc2V0IGN1c3RvbSBtYW5hZ2VkIHB5dGhvbiBzb3VyY2VzIChbIyYjODIwMzsxMDkzOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEwOTM5KSkKLSAgIFJlamVjdCBgcHlwcm9qZWN0LnRvbWxgIGZpbGVzIGluIGB1diBwaXAgY29tcGlsZSAtb2AgKFsjJiM4MjAzOzEyNjczXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2NzMpKQotICAgUmVzcGVjdCB0aGUgYC0tb2ZmbGluZWAgZmxhZyBmb3IgR2l0IG9wZXJhdGlvbnMgKFsjJiM4MjAzOzEyNjE5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2MTkpKQoKIyMjIyMgQnVnIGZpeGVzCgotICAgV2FybiBpbnN0ZWFkIG9mIGVycm9yIGlmIENSQyBhcHBlYXJzIHRvIGJlIG1pc3NpbmcgKFsjJiM4MjAzOzEyNzIyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI3MjIpKQotICAgQXZvaWQgaW5maW5pdGUgbG9vcCBpbiBgdXYgZXhwb3J0YCB3aXRoIGNvbmZsaWN0cyAoWyMmIzgyMDM7MTI3MjZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjcyNikpCgojIyMjIyBSdXN0IEFQSQoKLSAgIFVwZGF0ZSBNU1JWIHRvIDEuODQgKFsjJiM4MjAzOzEyNjcwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2NzApKQoKIyMjIHV2IDAuNi4xMwoKIyMjIyBJbnN0YWxsIHV2IDAuNi4xMwoKIyMjIyMgSW5zdGFsbCBwcmVidWlsdCBiaW5hcmllcyB2aWEgc2hlbGwgc2NyaXB0CgpgYGBzaApjdXJsIC0tcHJvdG8gJz1odHRwcycgLS10bHN2MS4yIC1Mc1NmIGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWluc3RhbGxlci5zaCB8IHNoCmBgYAoKIyMjIyMgSW5zdGFsbCBwcmVidWlsdCBiaW5hcmllcyB2aWEgcG93ZXJzaGVsbCBzY3JpcHQKCmBgYHNoCnBvd2Vyc2hlbGwgLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLWMgImlybSBodHRwczovL2dpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1pbnN0YWxsZXIucHMxIHwgaWV4IgpgYGAKCiMjIyMgRG93bmxvYWQgdXYgMC42LjEzCgp8ICBGaWxlICB8IFBsYXRmb3JtIHwgQ2hlY2tzdW0gfAp8LS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tfAp8IFt1di1hYXJjaDY0LWFwcGxlLWRhcndpbi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFhcmNoNjQtYXBwbGUtZGFyd2luLnRhci5neikgfCBBcHBsZSBTaWxpY29uIG1hY09TIHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1hYXJjaDY0LWFwcGxlLWRhcndpbi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXg4NlxfNjQtYXBwbGUtZGFyd2luLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYteDg2XF82NC1hcHBsZS1kYXJ3aW4udGFyLmd6KSB8IEludGVsIG1hY09TIHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di14ODZcXzY0LWFwcGxlLWRhcndpbi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFhcmNoNjQtcGMtd2luZG93cy1tc3ZjLnppcF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtYWFyY2g2NC1wYy13aW5kb3dzLW1zdmMuemlwKSB8IEFSTTY0IFdpbmRvd3MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFhcmNoNjQtcGMtd2luZG93cy1tc3ZjLnppcC5zaGEyNTYpIHwKfCBbdXYtaTY4Ni1wYy13aW5kb3dzLW1zdmMuemlwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1pNjg2LXBjLXdpbmRvd3MtbXN2Yy56aXApIHwgeDg2IFdpbmRvd3MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWk2ODYtcGMtd2luZG93cy1tc3ZjLnppcC5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC1wYy13aW5kb3dzLW1zdmMuemlwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di14ODZcXzY0LXBjLXdpbmRvd3MtbXN2Yy56aXApIHwgeDY0IFdpbmRvd3MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXg4NlxfNjQtcGMtd2luZG93cy1tc3ZjLnppcC5zaGEyNTYpIHwKfCBbdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IEFSTTY0IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1hYXJjaDY0LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtaTY4Ni11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWk2ODYtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IHg4NiBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtaTY4Ni11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgUFBDNjQgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXBvd2VycGM2NGxlLXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IFBQQzY0TEUgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXBvd2VycGM2NGxlLXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtczM5MHgtdW5rbm93bi1saW51eC1nbnUudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1zMzkweC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgUzM5MHggTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXMzOTB4LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IHg2NCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYteDg2XF82NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtYXJtdjctdW5rbm93bi1saW51eC1nbnVlYWJpaGYudGFyLmd6KSB8IEFSTXY3IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1hcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6KSB8IEFSTTY0IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtaTY4Ni11bmtub3duLWxpbnV4LW11c2wudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1pNjg2LXVua25vd24tbGludXgtbXVzbC50YXIuZ3opIHwgeDg2IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWk2ODYtdW5rbm93bi1saW51eC1tdXNsLnRhci5nei5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di14ODZcXzY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3opIHwgeDY0IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYXJtLXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFybS11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6KSB8IEFSTXY2IE1VU0wgTGludXggKEhhcmRmbG9hdCkgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFybS11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6LnNoYTI1NikgfAp8IFt1di1hcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1hcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6KSB8IEFSTXY3IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3ouc2hhMjU2KSB8CgojIyMgW2B2MC42LjEyYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9ibG9iL0hFQUQvQ0hBTkdFTE9HLm1kIzA2MTIpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvY29tcGFyZS8wLjYuMTEuLi4wLjYuMTIpCgojIyMjIyBFbmhhbmNlbWVudHMKCi0gICBSZXBvcnQgdGhlIHF1ZXJpZWQgZXhlY3V0YWJsZSBwYXRoIGluIGB1diBweXRob24gbGlzdGAgKFsjJiM4MjAzOzEyNjI4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2MjgpKQotICAgSW1wcm92ZSBhcmNoaXZlIHVucGFjayBlcnJvciBtZXNzYWdlcyAoWyMmIzgyMDM7MTI2MjddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjYyNykpCgojIyMjIyBCdWcgZml4ZXMKCi0gICBSZXNwZWN0IGBhdXRoZW50aWNhdGVgIHdoZW4gdXNpbmcgYGV4cGxpY2l0ID0gdHJ1ZWAgKFsjJiM4MjAzOzEyNjMxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2MzEpKQotICAgTm9ybWFsaXplIGV4dHJhIGFuZCBncm91cCBuYW1lcyBpbiBgdXYgYWRkYCBhbmQgYHV2IHJlbW92ZWAgKFsjJiM4MjAzOzEyNTg2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI1ODYpKQotICAgRW5mb3JjZSBDUkMtMzIgY2hlY2tzIHdoZW4gdW5wYWNraW5nIGFyY2hpdmVzIChbIyYjODIwMzsxMjYyM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNjIzKSkKLSAgIEZpeCBwYXJzaW5nIG9mIGBweXRob24tcGxhdGZvcm1gIGluIHNldHRpbmdzIGZpbGVzIChbIyYjODIwMzsxMjU5Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNTkyKSkKCiMjIyMjIERvY3VtZW50YXRpb24KCi0gICBBZGQgbm90ZSBhYm91dCBgdXYgYnVpbGRgIHRvIGBwYWNrYWdlID0gZmFsc2VgIChbIyYjODIwMzsxMjYwOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNjA4KSkKLSAgIEFkZCBpbmRleCBmYWxsYmFjayBub3RlIHRvIGBhdXRoZW50aWNhdGUgPSBhbHdheXNgIGRvY3VtZW50YXRpb24gKFsjJiM4MjAzOzEyNDk4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI0OTgpKQotICAgRml4IGludmFsaWQgJ2tpbmQnIHJlZmVyZW5jZSBpbiBmbGF0IGluZGV4IGRvY3MgKFsjJiM4MjAzOzEyNTgzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI1ODMpKQoKPC9kZXRhaWxzPgoKPGRldGFpbHM+CjxzdW1tYXJ5PnBldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucyAobmV0Ym94LXBsdWdpbi1kbnMpPC9zdW1tYXJ5PgoKIyMjIFtgdjEuMi45YF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9yZWxlYXNlcy90YWcvMS4yLjkpOiBGZWF0dXJlIHJlbGVhc2UgMS4yLjkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9jb21wYXJlLzEuMi44Li4uMS4yLjkpCgojIyMjIFdoYXQncyBDaGFuZ2VkCgotICAgUmVkZXNpZ25lZCB0aGUgcmVjb3JkIENob2ljZVNldHMgYW5kIGNyZWF0ZWQgdGhlIGBjdXN0b21fcmVjb3JkX3R5cGVzYCBvcHRpb24gYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzU5OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzU5OSkKLSAgIFByb3ZpZGUgYSBkZWZhdWx0IGxpc3Qgb2YgZmlsdGVyZWQgUlJUWVBFcyBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIFtodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNjAxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNjAxKQotICAgc2xpZ2h0IGNoYW5nZSBvZiB3b3JkaW5nIGJ5IFtAJiM4MjAzO2pwbWVuc10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2pwbWVucykgaW4gW2h0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC82MDJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC82MDIpCi0gICBBZGRlZCB0aGUgb3B0aW9uIHRvIHJlbW92ZSBzcGVjaWZpYyByZWNvcmQgdHlwZXMgZnJvbSB0aGUgZmlsdGVyIGxpc3QgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYwNF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYwNCkKLSAgIEludHJvZHVjZWQgY2hlY2sgZm9yIFNPQS1zYWZlIGZpZWxkcyBhbmQgYWRkZWQgdGVzdHMgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYwNl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYwNikKLSAgIEFkZGVkIHRoZSBwYXJlbnRhbF9hZ2VudHMgZmllbGQgdG8gRE5TU0VDUG9saWN5IGJ5IFtAJiM4MjAzO3BldGVlY2tlbF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbCkgaW4gW2h0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC82MDddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC82MDcpCi0gICBNb3ZlZCB0aGUgcGFyZW50YWxfYWdlbnRzIGZpZWxkIGZyb20gRE5TU0VDUG9saWN5IHRvIFpvbmUgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYwOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYwOSkKCioqRnVsbCBDaGFuZ2Vsb2cqKjogaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9jb21wYXJlLzEuMi43Li4uMS4yLjkKCiMjIyBbYHYxLjIuOGBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tcGFyZS8xLjIuNy4uLjEuMi44KQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL2NvbXBhcmUvMS4yLjcuLi4xLjIuOCkKCiMjIyBbYHYxLjIuN2BdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcmVsZWFzZXMvdGFnLzEuMi43KTogRmVhdHVyZS9CdWdmaXggUmVsZWFzZSAxLjIuNwoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL2NvbXBhcmUvMS4yLjYuLi4xLjIuNykKCiMjIyMgRE5TU0VDCgpUaGlzIGlzIHJlbGVhc2UgYWRkcyBETlNTRUMgc3VwcG9ydCBmb3IgTmV0Qm94IEROUy4KCk5ldEJveCBETlMgc3VwcG9ydHMgdGhlIG1hbmFnZW1lbnQgb2YgRE5TU0VDIGluIGFzIG11Y2ggYXMgRE5TU0VDIEtleSBUZW1wbGF0ZXMgYW5kIEROU1NFQyBQb2xpY2llcyBjYW4gYmUgc3RvcmVkIGluIE5ldEJveCBETlMgYW5kIGFzc2lnbmVkIHRvIHpvbmVzLiBJdCBkb2VzIG5vdCwgaG93ZXZlciwgc3VwcG9ydCB6b25lIHNpZ25pbmcgbm9yIHN0b3JpbmcgY3J5cHRvZ3JhcGhpYyBtYXRlcmlhbCBpbiB0aGUgTmV0Qm94IGRhdGFiYXNlLiBUaGVyZSBhcmUgdHdvIG1haW4gcmVhc29ucyBmb3IgdGhpcyBjb25jZXB0OgoKMS4gIFN0b3JpbmcgY3J5cHRvZ3JhcGhpYyBtYXRlcmlhbCBpbiBhIGRhdGEgc291cmNlIGZvciBhdXRvbWF0aW9uIGlzIGdlbmVyYWxseSBwcm9ibGVtYXRpYy4gV2hpbGUgdGhlcmUgaXMgdGhlIE5ldEJveCBTZWNyZXRzIHBsdWdpbiwgaXQgaXMgYmV0dGVyIHByYWN0aWNlIHRvIHN0b3JlIGNvbmZpZGVudGlhbCBkYXRhIGluIHZhdWx0IHN5c3RlbXMgc3BlY2lmaWNhbGx5IGNyZWF0ZWQgZm9yIHRoaXMgcHVycG9zZS4gKEluIHNvbWUgY2FzZXMgdGhlIGtleXMgYXJlIHN0b3JlZCBpbiBIU01zIGFzIGFuIGFkZGVkIG1ldGhvZCBvZiBwcm90ZWN0aW9uLikKMi4gIEluIHR5cGljYWwgbW9kZXJuIHNjZW5hcmlvcywgc2lnbmluZyBzZXJ2ZXJzIG1haW50YWluIGtleXMgYW5kIHNpZ24gcmVjb3Jkcywgc28gc3VjaCBjb25maWd1cmF0aW9ucyBkbyBub3QgZXZlbiByZXF1aXJlIGhhdmluZyBOZXRCb3ggRE5TIHByb3ZpZGUga2V5cyBvciBjcmVhdGUgdGhlIHNpZ25hdHVyZXMgZnJvbSB3aXRoaW4gTmV0Qm94IEROUy4KCkFkZGl0aW9uYWxseSwgdGhlcmUgaXMgbm8gZGlyZWN0IGludGVncmF0aW9uIGJldHdlZW4gTmV0Qm94IGFuZCBhbnkgZ2l2ZW4gbmFtZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24sIHNvIGFuIGludGVyZmFjZSBmb3IgcHJvdmlkaW5nIHNpZ25lZCB6b25lcyB0byBhIG5hbWUgc2VydmVyIGlzIGdlbmVyYWxseSBvdXQgb2Ygc2NvcGUgZm9yIE5ldEJveCBETlMsIGp1c3QgYXMgaXQgaXMgdGhlIGNhc2UgZm9yIHNlcnZpbmcgcGxhaW4gRE5TLiBUaGlzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCB1c2luZyBzcGVjaWZpYyBzb2x1dGlvbnMgYWRhcHRlZCB0byB0aGUgdXNlIGNhc2UgYW5kIHRoZSBuYW1lIHNlcnZlciBpbXBsZW1lbnRhdGlvbiB1c2VkLgoKQXMgbm90ZWQgZWFybGllciB0aGVyZSBhcmUgdHdvIGRhdGEgbW9kZWxzIGZvciBETlNTRUMgaW4gTmV0Qm94IEROUzogRE5TU0VDIEtleSBUZW1wbGF0ZXMgYW5kIEROU1NFQyBQb2xpY2llcy4gVGhlIGZvcm1lciBhcmUgdXNlZCBmb3Igc3RvcmluZyBwYXJhbWV0ZXJzIGZvciBETlNTRUMgS2V5cyBzdWNoIGFzIHRoZSB0eXBlLCBhbGdvcml0aG0gYW5kIGxpZmV0aW1lLCBhbmQgdGhlIGxhdHRlciB0byBkZWZpbmUgcG9saWNpZXMgdGhhdCBkZXRlcm1pbmUgaG93IG9mdGVuIHNpZ25hdHVyZXMgYXJlIHJlZ2VuZXJhdGVkLCBEUyByZWNvcmRzIGFyZSBwcm9wYWdhdGVkIGV0Yy4KCldoaWxlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBvcmllbnRlZCBsYXJnZWx5IHRvd2FyZHMgb3B0aW9ucyBCSU5EIDkgcHJvdmlkZXMsIHRoaXMgaXMgbWFpbmx5IGJlY2F1c2UgdGhhdCBzb2Z0d2FyZSBoYXMgYSBodWdlIHNldCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIG90aGVyIHByb2R1Y3RzIGFyZSB1c3VhbGx5IG5vdCB2ZXJ5IGRpZmZlcmVudCwgaW4gbW9zdCBjYXNlcyBtb3JlIGxpbWl0ZWQgdGhhbiBCSU5EIDkuIEdpdmVuIHRoZSBsYXJnZSBpbnN0YWxsZWQgYmFzZSBvZiBCSU5EIDksIHRoaXMgaXMgY29uc2lkZXJlZCBhIGdvb2QgYmFzaXMuIChUaGVyZSBpcywgaG93ZXZlciwgbm8gcmVhc29uIHdoeSBOZXRCb3ggRE5TIGNhbm5vdCBiZSB1c2VkIHRvIG1haW50YWluIGRhdGEgZm9yLCBzYXksIEtub3QtRE5TIG9yIFBvd2VyRE5TLikKCkZvciBhIHN1bW1hcnkgb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LCBzZWUgW3RoaXMgYmxvZ3Bvc3RdKGh0dHBzOi8vanBtZW5zLm5ldC8yMDI1LzAzLzE2L2Ruc3NlYy1wb2xpY3ktYW5kLWtleS10ZW1wbGF0ZS1zdXBwb3J0LWluLW5ldGJveC1kbnMvKSBieSBbQCYjODIwMztqcG1lbnNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9qcG1lbnMpLgoKIyMjIyBXaGF0J3MgQ2hhbmdlZAoKLSAgIFNPQSBNTkFNRSBtdXN0IGJlIGNoZWNrZWQgaW4gem9uZSBmb3JtcyBpZiB6b25lIHRlbXBsYXRlIGlzIG5vdCBzZXQgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzU4OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzU4OSkKLSAgIGNvbXBsZXRlIGZyIHRyYW5zbGF0aW9uIGJ5IFtAJiM4MjAzO2plYW4xXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vamVhbjEpIGluIFtodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNTkyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNTkyKQotICAgQ2hlY2sgd2hldGhlciB6b25lIHdhcyBwYXNzZWQgdmlhIGRpY3QgYmVmb3JlIHJlc29sdmluZyB0ZW1wbGF0ZXMgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzU5NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzU5NCkKLSAgIEFkZCBETlNTRUMgc3VwcG9ydCBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIFtodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNTYzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNTYzKQotICAgQWRkIGRvbWFpbiByZWdpc3RyYXRpb24gZXhwaXJhdGlvbiBkYXRlIGFuZCBFUFAgc3RhdHVzIGZpZWxkcyBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIFtodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNTkwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNTkwKQotICAgQWRkIHRlc3RzIGZvciBOZXRCb3ggRE5TIG9iamVjdHMgYXMgY3VzdG9tIGZpZWxkIHRhcmdldHMgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzU5NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzU5NSkKLSAgIEluaXRpYWxpc2Ugdmlld3MgaW4gYHVybHMucHlgIGluc3RlYWQgb2YgYHJlYWR5KClgIGJ5IFtAJiM4MjAzO3BldGVlY2tlbF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbCkgaW4gW2h0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC81OTZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC81OTYpCgoqKkZ1bGwgQ2hhbmdlbG9nKio6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tcGFyZS8xLjIuNi4uLjEuMi43Cgo8L2RldGFpbHM+CgotLS0KCiMjIyBDb25maWd1cmF0aW9uCgrwn5OFICoqU2NoZWR1bGUqKjogQnJhbmNoIGNyZWF0aW9uIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpLCBBdXRvbWVyZ2UgLSBBdCBhbnkgdGltZSAobm8gc2NoZWR1bGUgZGVmaW5lZCkuCgrwn5qmICoqQXV0b21lcmdlKio6IERpc2FibGVkIGJ5IGNvbmZpZy4gUGxlYXNlIG1lcmdlIHRoaXMgbWFudWFsbHkgb25jZSB5b3UgYXJlIHNhdGlzZmllZC4KCuKZuyAqKlJlYmFzaW5nKio6IFdoZW5ldmVyIFBSIGJlY29tZXMgY29uZmxpY3RlZCwgb3IgeW91IHRpY2sgdGhlIHJlYmFzZS9yZXRyeSBjaGVja2JveC4KCvCfkbsgKipJbW1vcnRhbCoqOiBUaGlzIFBSIHdpbGwgYmUgcmVjcmVhdGVkIGlmIGNsb3NlZCB1bm1lcmdlZC4gR2V0IFtjb25maWcgaGVscF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3Jlbm92YXRlYm90L3Jlbm92YXRlL2Rpc2N1c3Npb25zKSBpZiB0aGF0J3MgdW5kZXNpcmVkLgoKLS0tCgogLSBbIF0gPCEtLSByZWJhc2UtY2hlY2sgLS0+SWYgeW91IHdhbnQgdG8gcmViYXNlL3JldHJ5IHRoaXMgUFIsIGNoZWNrIHRoaXMgYm94CgotLS0KClRoaXMgUFIgd2FzIGdlbmVyYXRlZCBieSBbTWVuZCBSZW5vdmF0ZV0oaHR0cHM6Ly9tZW5kLmlvL3Jlbm92YXRlLykuIFZpZXcgdGhlIFtyZXBvc2l0b3J5IGpvYiBsb2ddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vZ2l0aHViL29zaXNtL2NvbnRhaW5lci1pbWFnZXMpLgo8IS0tcmVub3ZhdGUtZGVidWc6ZXlKamNtVmhkR1ZrU1c1V1pYSWlPaUl6T1M0eU1EY3VNU0lzSW5Wd1pHRjBaV1JKYmxabGNpSTZJak01TGpJMU55NHpJaXdpZEdGeVoyVjBRbkpoYm1Ob0lqb2liV0ZwYmlJc0lteGhZbVZzY3lJNld5SnlaVzV2ZG1GMFpTSmRmUT09LS0+Cg==
      patchset: 9980e49e057b4d73e0e3671a997e24255af23010
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: fa94074a33c2a4b1ff3eaadb063e1f29046bf671
          trusted/project_1/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 34ae850a7303da5bb21907d41439ae6afbc1fe3e
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: f7abfe5b7dfd12b80bc14a21a9dbf0711aea1f3b
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: fa94074a33c2a4b1ff3eaadb063e1f29046bf671
          untrusted/project_2/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 34ae850a7303da5bb21907d41439ae6afbc1fe3e
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/yamllint/run.yaml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_0/zuul-jobs
            link_target: untrusted/project_0/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_0/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_1/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_1/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_2/opendev.org/zuul/zuul-jobs
            role_path: ansible/playbook_0/role_2/zuul-jobs/roles
      post_review: false
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/container-images
        name: osism/container-images
        short_name: container-images
        src_dir: src/github.com/osism/container-images
      projects:
        github.com/osism/container-images:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          checkout: main
          checkout_description: zuul branch
          commit: ad0af6bb010f520af13bfa8fd50e6848b10950e3
          name: osism/container-images
          required: false
          short_name: container-images
          src_dir: src/github.com/osism/container-images
      ref: refs/pull/709/head
      resources: {}
      tenant: osism
      timeout: 1800
      voting: true
